Mathlife
Mathlife의 학습 노트
Mathlife
전체 방문자
오늘
어제
  • 분류 전체보기
    • CS
      • 알고리즘
      • 자료구조
      • 운영체제
      • 네트워크
      • 데이터베이스
    • 프로그래밍 언어
      • Java
      • JavaScript
      • C·C++
      • Python
    • Backend
      • Spring
    • Frontend
      • HTML
      • CSS
    • Math
      • Linear Algebra
      • Calculus
    • AI
      • ML
      • DL
      • RL
    • Git

블로그 메뉴

  • 홈
  • 관리
  • 글쓰기
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Mathlife

Mathlife의 학습 노트

[ETL] Process Creation and Termination
CS/운영체제

[ETL] Process Creation and Termination

2022. 5. 22. 06:05

출처 : 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
    'CS/운영체제' 카테고리의 다른 글
    • Deadlock
    • [ETL] Multithreading
    • [ETL] Context Switching
    • [ETL] Processes and Threads - Process Scheduling
    Mathlife
    Mathlife

    티스토리툴바