본문 바로가기
보관/시스템 소프트웨어

System Software and Program Execution(1)

by unhyepnhj 2024. 10. 17.

Program Execution 관련 System Software

  • 컴파일러: 고급 언어 프로그램을 기계로 번역
  • 어셈블러: 어셈블리어 프로그램을 기계어 프로그램으로 번역(ex: MIPS)
  • 링커: 여러 object file 및 library file을 하나의 executable file로 묶음
  • 로더: executable file 및 object file을 메모리에 올림

- 상용 컴파일러 소프트웨어(gcc, visual c)가 컴파일러, 어셈블러 링커 등을 포함하므로 해당 소프트웨어를 사용하여 소스 파일 → 실행 파일 변환 한 번에 가능

- 로더 기능은 유닉스, 윈도우 등의 운영체제에 포함되어 수행


Programming Language

 

1. 고급 언어(High Level Language)

- 인간이 이해하기 가장 쉬운 언어(=자연어에 가까움)

- machine independent

- machine language/assembly language로 변환시켜 주는 compiler나 interpreter 등의 소프트웨어 필요

- ex) BASIC, C, JAVA, C++, etc.

 

2. 어셈블리어(Assembly Language)
- 0과 1의 조합을 상징적인 코드로 변환하여 인간의 이해도를 향상시킨 언어

- 기계어와 1대 1로 mapping(↔ 고급 언어 한 문장은 어셈블리어나 기계어 여러 문장으로 변환)

- machine dependent

 

3. 기계어(Machine Language)
- 컴퓨터가 직접 이해할 수 있는 언어

- machine dependent

- 0과 1로 구성됨


Separate Compile(부분 컴파일)

부분 컴파일 예시

one.c

- 컴파일은 되지만 실행 불가(func() 함수가 선언되어 있지 않으므로)

 

two.c

- main 함수가 없으므로 실행이 무의미하지만(a, b가 선언되어 있지 않으므로 사용 불가할 것) 컴파일 가능

one.c와 two.c를 묶어서 실행

- two.c 에 func() 함수가 정의되어 있으므로 one.c에서 func() 사용 가능

- one.c에 a, b가 선언되어 있으므로 two.c 에서 a, b 선언 가능

extern

해당 변수나 함수가 외부에 정의되어 있음을 표시
외부에 정의된 것을 가져다 쓸 것이므로, 현재 파일에 정의가 없어도 일단 컴파일이 가능해짐

 

※ one.c의 static int c = 5; 를 int c = 5;로 변경한다면?

 

two.c 와 링크하여 실행하면 c가 2번 정의되었으므로 오류

static int c라면 one.c에서만 사용되는 c임을 의미하므로(해당 파일 내에서만 참조 가능) two.c와 링크해도 오류가 발생하지 않는다.

a.c에서 x를 정의하고, 이를 b.c와 c.c 모두에서 사용하는 예시


Symbol Table

컴파일러는 object 파일을 만들 때 symbol table을 유지한다. 함수를 호출하면 이와 관련된 메모리 주소들을 이 symbol table에 유지하다 함수return 시 이 symbol들을 주소 값으로 치환하게 되는데, 위의 경우 file.c에 정의되어 있는 x나 y 같은 변수들은 그 주소를 알 수 있는 반면 z(extern int)의 주소는 알 수 없다.

이때 file.c를 다른 파일과 링크하게 되면 비어 있었던 z의 주소를 찾을 수 있으므로, 온전한 실행 파일을 만들 수 있다. 

'보관 > 시스템 소프트웨어' 카테고리의 다른 글

vi editor  (0) 2024.12.06
System Software and Program Execution(2)  (0) 2024.10.17
Procedure Call in MIPS(3)  (0) 2024.10.16
Procedure Call in MIPS(2)  (0) 2024.10.16
Procedure Call in MIPS(1)  (0) 2024.10.16