OS의 동작을 이해하기 위해 program이 동작하는 과정을 이해해야 한다. 이 부분에 대한 내용은 System Programming에서 자세히 다룬다. 간단하게 집고 넘어간다.
1. Turning C file into Object file
일반적으로 C언어 등으로 code를 작성한다. 하지만 컴퓨터가 이해할 수 있는 언어는 0과 1 뿐이다. (정전용량을 변경하는 것이 다이기 때문) 그렇기에 text로 이루어진 code를 Binary로 바꿔주는 과정이 필요하다. 해당 과정은 다음과 같다.
1-1. C to Assembly text file :: Compiler
C언어 등의 우리가 사용하는 언어는 High language이다. 한마디로 컴퓨터가 이해하기 어렵다는 말이다. 컴퓨터에게 좀더 친화적인 언어가 있는데 그것이 바로 Assembly language이다. 레지스터, 적은 수의 명령어 셋으로 이루어져 있다.
High language file을 Low language file로 바꿔주는 것이 Compiler이다. 대표적으로 "gcc -S 파일명.c"를 통해 assembly file을 얻을 수 있다.
1-2. Assembly to Object file :: Assembler
Low language를 컴퓨터가 이해할 수 있는 Binary로 바꿔주는 것은 Assembler가 담당한다. CPU가 이해할 수 있지만, Program으로써 동작은 하지 못한다. Memory에 올라가야 비로소 program으로 동작할 수 있다.
1-3. Object to Executable file :: Linker
일반적으로 하나의 program은 여러개의 source file로 구성된다. 관리가 편하고 수정이 용이하기 때문이다. 여러 source file을 하나의 executable file로 합쳐줄 필요가 있는데 이 역할을 Linker가 해준다.
Executable Object file에는 format이 있는데 이는 다음과 같다.
- Header section : machine의 type, file type 등의 정보가 있다. Loading에 사용된다.
- .text section : code들이 저장된다.
- .rodata section : variable data 중 수정이 안되는 data들이 저장된다.
const int a = 10
- .data section : variable data 중 수정이 가능한 data들이 저장된다.
int a = 10
- .bss section : initialized가 되지 않은 data들이 평소에는 저장되지 않다가, program이 동작하면서 사용되면 공간을 할당받는다.(저장된다.)
int a
1-4. Executable to Memory :: Loader
memory에 올라가야 비로소 process가 될 수 있다. 이 과정은 Loader가 맡아서 수행한다. main memory(ex. DRAM)에서의 구성은 다음과 같다.
1-5. Running program :: OS
memory에 올라온 실행파일을 실행해 주는 것이 OS가 하는 역할이다.
2. Process
process란 실행되는 program의 instance를 일컫는다. 독점적 CPU와 Memory를 가진 것처럼 동작하는데, 이를 가능하게 해주는 것이 바로 OS이다.
2-1. Process Creation
- Load program on memory
- run-time stack 생성
- heap 생성
- initialization task 수행
- start program
process가 생성되는 과정은 위와 같다.
'대학교 > 운영체제' 카테고리의 다른 글
[CS/운영체제] 1. Introduction (1) | 2022.02.19 |
---|