출처 : SNUON / 운영체제의 기초: 쉽게 배우는 운영체제 원리 / 서울대 홍성수 교수님
Process Creation
단순한 toy OS 를 만들고자 한다면 fake stack 쌓는 것으로 process creation 가능.
하지만, 실제 OS는 조금 더 복잡하다.
프로세스 생성 과정
- 먼저 disk에 있는 executable file 읽는다
- executable file의 code, global 변수 등을 쭉 읽어들인다(load)
- code 영역에 code 넣어주고 data 영역에 data 넣어준다. 빈 스택 영역, 힙 영역 만든다.
- PCB 만든다
- PCB를 ready queue에 끼워넣는다
주의
UNIX 계열은 0번 프로세스만 이렇게 생성하고 나머지 프로세스는 fork로 cloning.
UNIX process creation
fork
- fork 호출이 되면 OS가 fork 호출한 부모 프로세스를 즉시 중단
- 부모 프로세스의 context를 그대로 복제. PID는 복제하지 않는다.
exec
- fork만 호출하면 단순히 context만 복제된다
- 새로운 프로그램을 돌릴 수가 없다
- fork 호출 이후 반드시 exec도 호출한다
- executable file의 path가 exec의 parameter가 된다
- 새로운 프로그램의 코드와 데이터를 덮어쓴다.
cmd = readcmd();
// 실행시킬 program의 path 지정
pid = fork();
// fork 할 때 스택도 복제되니까 PC 값도 복사된다 $\rightarrow$ 자식 프로세스도 똑같이 fork 다음부터 수행.
// fork 할 때 OS가 스택에 있는 cpu registers의 특정 값을 바꿔서 부모 프로세스와 자식 프로세스 각각의 fork 반환값 pid를 설정해준다
// 부모 프로세스 : pid == child's pid
// 자식 프로세스 : pid == 0
wait(pid);
// child process의 종료 상태에 관심이 있을 때만 호출
노트
COW 등의 방법으로 context 복제하고 덮어 씌우는 비효율을 극복하고 있기 때문에 실제로는 비효율적이지 않다
'CS > 운영체제' 카테고리의 다른 글
Deadlock (0) | 2022.05.24 |
---|---|
[ETL] Multithreading (0) | 2022.05.22 |
[ETL] Context Switching (0) | 2022.05.22 |
[ETL] Processes and Threads - Process Scheduling (0) | 2022.05.16 |
[ETL] Processes and Threads - Process Concept (0) | 2022.05.16 |