-
임시 - Linux Kernel - 2장 (2) : Process Management ( 고건 교수님 OLC 강의 )Linux Kernel 2024. 6. 30. 18:02
2장 - Process Management : Level 1
OS 가 해야할 일은 밑으로는 hardware를 관리해야하고 (자원 관리 )
위로는 프로그램이 잘 동작하도록 지원해줘야 한다.
따라서, 하드웨어 하나마다 대응되는 internal 자료 구조를 가지고 있어야한다.
또한, 프로세스 마다 대응되는 자료구조가 있어야 OS 에서 관리할 수 있다.
이때 사용되는 자료구조가 PCB이다.
PCB는 Process Control Block 의 약자이다.
PCB와 하드웨어에 대응되는 자료구조는 metadata를 가진다.
프로세스를 관리하기 위해 OS에서 관리해야 하는 metadata에는 어떤것이 있을까? PCB안에는 어떤 정보가 있는가?
- PID, priority, 상태, 디스크 어디에 있는가, 메모리 어디에 있는가, open files 등등
잠깐 , 짚고 넘어가야 할 것이 리눅스에서는 모든 것이 file로 다뤄진다는 점이다.
file은 “sequence of bytes”이다.
가장 먼저 열리는 파일로는 키보드, 스크린이 있다.
OS에서 내 프로그램이 시작하기도 전에 키보드파일과 스크린 파일을 open을 해놓는다.
cpu를 넘겨줄 때는 레지스터값을 save 해놓고 넘겨준다. 이때 save를 PCB안에 해놓는다.

각 프로그램마다 user stack이 있고 kernel stack이 있다.
프로그램이 무지막지하게 커지는 것을 막기 위해 stack을 사용하는 것을 잊지 말자.
자식 프로세스를 만들때에는,
먼저 PCB를 할당해주고 부모 프로세스의 PCB 정보를 복사한다.
이후, 메모리 공간을 할당해주고, 부모 프로세스의 image를 복사해준다.
(이 작업이 끝나면,자식 프로세스는 부모와 똑같은 코드를 가지게 된다. )
정리하면 ,
child 프로세스를 만들어주기 위해서는 2가지를 해야 한다.
- 커널 안에 자료 구조를 만들어 줘야 한다.
- 이미지를 만들어 줘야 한다.
커널안에 자료구조는 공간을 확보하고, 부모의 PCB정보로 채워 넣어준다.
프로세스 이미지는 공간을 확보하고, 부모의 이미지로 채워넣는다.
메모리 공간을 할당받은 자식 프로세스는 디스크로부터 새로운 이미지를 load하고, 자식 PCB를 ready queue에 넣는다.
( 이 때, cpu는 아직 parent가 쓰고 있다. )
강의를 보면 총 4단계로 이루어져 있는데, 다시 써보면
- PCB를 위한 공간 확보 및 할당, 이후 부모의 PCB를 복사해서 내용 채움.
- 메모리 공간 확보 및 할당, 이후 부모의 image를 복사해서 내용 채움.
- 디스크로부터 새로운 이미지를 load해서 내용을 채움.
- child PCB를 ready list에 넣어줌.
1,2 번은 fork () system call
3,4번은 exec () system call
과 대응된다.
fork는 한 번 call 하면 2번 돌아온다. ( call once return twice )
child process는 복사한 pc 값부터 시작하게 된다.
( 이때문에 return 2번 )
'Linux Kernel' 카테고리의 다른 글
임시 - Linux Kernel - 4장 : Process management( 1 ) ( 고건 교수님 OLC 강의 ) (0) 2024.07.04 커널 모듈 개발의 기초 - Linux 커널 모듈 프로그래밍 가이드(5.x) 참고 (4) 2024.07.02 임시 - Linux Kernel - 3장 : System Call(2) ( 고건 교수님 OLC 강의 ) (0) 2024.07.01 임시 - Linux Kernel - 2장 (1) : System Call (1) ( 고건 교수님 OLC 강의 ) (0) 2024.06.30 임시 - Linux Kernel - Introduction ( 고건 교수님 OLC 강의 ) (0) 2024.06.29