목차
📂content
1. 프로세스 생성
- 사람은 자식을 낳으면 아이부터 시작해서 자라는데, 프로세스는 부모 프로세스가 자식 프로세스를 낳으면 복제 생성을 하게 된다. 부모와 같은 나이를 가진 프로세스가 하나 생긴다.
- 프로세스를 만드는 행위는 사용자 프로세스가 아닌 운영체제가 한다. 직접 못 하는 것은 시스템 콜을 해서 운영체제에게 부탁한다.
- 프로세스에서는 부,모가 따로 있는 것이 아니다. 하나가 복제 생성을 해서 만들어져서 트리 구조이다.
- 프로세스는 자원을 필요로 한다. 자원은 운영체제에게 받는데, 경우에 따라서는 부모 프로세스와 자원을 공유하는 경우가 있다. 앞에서 스레드들끼리는 자원을 공유한다고 했다. 하나의 프로세스 내부에 여러 스레드가 있어서 자원을 공유함. 부모가 자식을 낳으면 사실 두 개(부모, 자식)는 별개의 프로세스이다. 그래서 원칙적으로 프로세스끼리는 자원을 공유하는 것이 아니고 자원을 가지고 싸운다. 이게 일반적이다. 그래서 여기의 공유한다는 경우는 이례적인 경우이다.
- 원칙은 자식을 만들면 부모와 자식은 독립적으로 돌아간다.
2. fork() 시스템 콜
- fork()는 자식프로세스를 하나 만들어달라는 커널함수
- fork()는 시스템 콜. 운영체제에게 요청한 함수.
- fork()를 하는 순간 이 시점부터 위 코드의 구조를 가진 프로세스를 하나 더 만든다.
- 내가 부모인지 자식인지 복제를 해서 알 수가 없다. 그래서 구분을 해야한다. fork()시스템콜을 호출한 결과값(return value)가 부모인 경우는 양수, 자식은 0을 받는다. 그래서 구분 가능.
- 코드에는 지금 if문을 써서 부모와 자식을 구분해 놓았는데 만약 if문이 없다면 부모와 자식은 같은 일을 수행한다.
3. exec() 시스템 콜
- execlp는 새로운 프로그램으로 덮어 씌우는 함수.
- execlp의 사용 방법은 프로그램의 이름을 경로까지 해서 “”안에 적어주고, 세번째 argument부터는 이 프로그램에게 전달할 argument를 쭉 나열하고 마지막에 0를 보내준다.
- execlp가 들어가서 완전히 새로운 프로그램이 되어서 아랫 부분의 Hello부분은 실행이 되지 않는다.
- 그래서 나는 내 프로그램 돌리고 자식에게 새로운 프로그램을 돌리게 한다.
4. 프로세스 생성
- 프로세스가 만들어지면 그 프로세스만의 독자적인 주소 공간(코드 데이터 스택)이 만들어진다.
- 자식의 주소 공간은 부모의 것을 그대로 복사한다. 부모의 코드 데이터 스택으로 구성된 메모리 주소 공간을 fork()에서 자식을 만들면 그대로 복사함. 이 이야기는 코드, 데이터, 스택이 복사된다는 것.
- 전역변수, 변수, 데이터를 부모 것 그대로 가져간다
- 스택 복사 ⇒ 현재 어디 수행하는 지 위치를 복사. 그래서 이 위치부터 자식이 실행됨.
- 그런데 이렇게 부모를 복제 생성하면 시스템 안에 존재하는 모든 프로세스는 다 같은 일을 하게 된다. 우리는 여러 프로그램을 돌린다. 여러 프로그램을 돌릴 수는 있는데, 일단은 복제하고 여기에 돌리고 싶은 프로그램을 덮어 씌워서 프로그램을 돌린다. 그래서 프로세스가 하나가 만들어질 때는 부모가 fork()를 해서 복제생성을 해놓고 다른 프로그램을 돌리고 싶다!그러면 자식에게 새로운 프로그램을 덮어 씌워서 올리는데 이것을 exec system call 이라고 한다.
- fork() : 복제 생성
exec() : 완전히 새로운 프로그램을 덮어 씌우는 것을 의미
5. 프로세스 종료(Process Termination)
- 프로세스는 항상 부모가 자식을 만듦. 그래서 자식이 종료하면 부모에게 종료된다는 사실을 알림. 사람과 달리 일반적으로 프로세스에서는 자식이 먼저 죽고 뒷정리를 부모가 한다.
- 종료 되는 경우
- 프로세스가 자발적으로 exit콜을 하고 종료. 이 사실이 부모에게 통보
- 자식을 낳았더니 나쁜짓을 해서 부모가 강제로 자식을 죽임 ⇒ abort
- 자식이 한계치를 넘어서는 짓을 함.
- 자식을 일 시키려고 낳았는데 더 이상 시킬일이 없을 때
- 부모가 먼저 종료되는 경우 룰을 위배하게 되므로 자식을 먼저 죽임. 그리고 부모를 죽임.
⇒ 트리 구조라서. 말단부터 죽이는 것임.
⇒ 단계적 종료
📑 출처
http://www.kocw.net/home/cview.do?cid=4b9cd4c7178db077
감사합니다😊
'🎥Etc > [kocw]운영체제' 카테고리의 다른 글
[Ch3]프로세스 관리3,4 (0) | 2023.06.25 |
---|---|
[Ch3]프로세스 관리2 (0) | 2023.06.25 |
[Ch3]프로세스 관리1 (0) | 2023.06.25 |
[Ch2]컴퓨터 시스템의 구조4 (0) | 2023.06.23 |
[Ch2]컴퓨터시스템의 구조3 (0) | 2023.06.23 |