DKU/시스템프로그래밍

[시프] 1-2 시스템 프로그램의 종류 ①

ʕ민지ʔ 2022. 11. 10. 14:39

시스템 프로그램의 종류

1. compilation system (번역 시스템)

2. Operating system (운영체제)

3. Runtime system (런타임 시스템)

4. Hardware consideration (하드웨어 고려)

 

① Compilation System (번역 시스템)

01 언어 계층 구조

번역 시스템의 concept은 언어 계층 구조로, high-level 언어를 기계어로 바꿔주는 시스템이다.

 

02 전체적인 구조와 6가지 중요 구성요소

1. Editor : 편집기를 사용해서 C 프로그램을 만든다.

- C File : 만들어진 C 프로그램은 input으로 compiler에 들어간다.

2. Compiler : C 프로그램을 어셈블리어로 바꾼다.

- Error Msg : 에러가 있으면 에러 메시지를 출력한다.

- ASM File : 어셈블리어로 바뀐 파일은 input으로 Assembler에 들어간다.

3. Assembler : 어셈블리어를 기계어로 바꾼다.

- Relocatable Object File : 재배치 가능한 오브젝트 파일. Linker에 input으로 들어간다.

4. Linker : 내가 만든 오브젝트 파일과 다른 오브젝트 파일, 라이브러리를 합친다.

- Executable Object File : 수행 가능한 오브젝트 파일. 바이너리 파일(기계어)으로 시스템에 올라가서 수행이 가능하다.

5. Loader : 디스크에 있는 내용을 메모리에 올린다.

- input data → 컴퓨터 프로그램 → results

6. debugger : 수행하고 있는 프로그램의 상태를 체크하고 버그를 잡는다.

 

03 언어 계층 구조와 번역 시스템의 전체적인 구조 사이의 관계

high-level language : C File

assembly language : ASM File

machine language : Relocatable object file, executable object file

< Relocatable object file과 executable object file >
- 둘 다 binary이다. (이진수로 구성되어 있음)
- Relocatable object file (재배치 가능) : 아직 주소, 외부 참조가 확정되지 않은 상태이다. 즉, 이진수로 만들어지긴 했지만 혼자서는 수행될 수 없고, 언젠가는 재배치되어야 하는 기계어이다.
- executable object file (수행 가능) : 혼자 동적으로 수행이 가능한 기계어이다. 즉, 주소가 결정되어 메인 메모리 상에 어디로 올라갈지도, 외부참조도 결정이 된 상태이다. linking이 완료된 object이다.

 

04 리눅스에서의 예시

  • $ : Shell, 명령어 해석기 (Command Interpreter)
  • ls : 사용자가 입력한 명령어를 해석해서 처리한다.
  • vi : editor, 편집기를 실행한다.
  • gcc : compiler, 컴파일-어셈블-링킹을 모두 한꺼번에 수행한다.
  • ./a.out : 실제 a.out을 수행한다. (executable object file은 리눅스 상에서 디폴트로 a.out이라는 이름으로 만들어진다.)
  • / : 리눅스에서 디렉토리를 구분할 때 사용한다.
  • . : 현재 디렉토리

 

 

 

① vi hello.c

② gcc hello.c

③ ./a.out

→ 리눅스를 사용해서 시스템 프로그래밍을 배우는 이유는 편집기, 컴파일러 등의 시스템 프로그램을 직접 손으로 작성해서 실행해볼 수 있기 때문이다.

 

 

 

① vi hello.c : 편집기 실행

① 수행 후 : hello.c 파일 만들어짐

②-1 gcc -S hello.c : 컴파일만 수행 

②-1 수행 후 : hello.s (어셈블리) 파일 만들어짐

②-2 as -o hello.o hello.s : 어셈블러(어셈블리어→기계어)만 수행

②-2 수행 후 : hello.o (재배치 가능한 오브젝트) 파일 만들어짐

②-3 …./collect2/…. : 링커만 수행

②-3 수행 후 : a.out (실행 가능한 오브젝트) 파일 만들어짐

③ ./a.out : a.out 실행

 

Q1) hello.c와 hello.s의 차이점은?

- .c는 high-level 언어이고, .s는 어셈블리 언어이다. 즉, 언어 계층구조의 차이가 있다.

Q2) hello.o와 a.out의 차이점은?

-.o는 재배치 가능한 기계어이고, a.out은 실행 가능한 기계어이다.