인프런 커뮤니티 질문&답변

르르말님의 프로필 이미지
르르말

작성한 질문수

그림으로 쉽게 배우는 운영체제

프로세스 동작 및 스케줄링 알고리즘 관련 질문 드립니다.

해결된 질문

작성

·

410

1

안녕하세요. 프로세스 및 스케줄링 알고리즘 강의를 들으면서 궁금한 점이 생겨 질문 드립니다.

1. 프로세스 동작 관련 질문

제가 프로세스 관련해서 공부를 하다가 추가적으로 Process Table이라는 개념을 알게 되었습니다. Process Table은 PCB 값을 빨리 찾을 수 있도록 PCB 참조 포인터를 가지며, 프로세스가 종료되어도 zombie process 형태로 Process Table에 남아 있다고 배웠습니다.

이 개념과 결합하여 몇 가지 질문 드립니다.

1-1. 강의에서 프로세스 종료 시 운영체제가 해당 프로세스의 PCB를 연결 리스트에서 제거한다고 하셨는데, 이때 PCB 자체가 사라지는 건가요? 아니면 PCB는 커널 어딘가에 저장되어 있고 연결 리스트에서만 제거 되는 건가요?

1-2. 만약 PCB 자체가 사라지는 거라면 Process Table에 저장된 PCB 포인터도 사라지는 건가요? 그럼 Zombie Process는 어떻게, 왜 남아있는 건가요?

 

 

2. 스케줄링 알고리즘 관련 질문

스케줄링 알고리즘 강의에서 큐에 프로세스의 정보가 담긴 PCB를 넣는다고 하셨습니다.

2-1. 여기서 PCB가 실제 PCB를 말하는 건지 PCB의 주소를 참조하는 참조값인지 궁금합니다.

2-2. 만약 참조값이라면 Queue에서 PCB를 직접 참조하는 건지, 아니면 Process Table을 거쳐서 PCB를 찾는 간접 참조인지 궁금합니다.

 

 

3. 프로세스 생성 및 스케줄링 동작 정리

위 질문 사항을 제외하고 제가 이해한 게 맞는지 확인해주시면 감사하겠습니다.

메모리 공간은 경계 레지스터에 의해 운영체제 영역과 사용자 영역으로 나뉘며, 프로그램 실행 시 사용자 영역에 Process 1이 적재되면 운영체제 커널에는 PCB1이 생성됩니다. 스케줄링 알고리즘 역시 운영체제 커널에 저장되어 있으며 스케줄링 알고리즘 내부에서 준비큐가 동작하여 PCB1을 통해 Process 1의 상태 정보를 불러와 CPU를 할당하고 실행합니다. 이후 스케줄링 알고리즘에 따라 다음 PCB2를 통해 Process2를 실행하며 이 과정을 모든 Process가 종료될 때까지 반복합니다.

 

공부를 하면 할수록 개념이 꼬이는 것 같아서 질문 드립니다. 복잡한 질문이지만 답변해주시면 정말 감사하겠습니다.

답변 1

0

감자님의 프로필 이미지
감자
지식공유자

안녕하세요 르르말님.
질문에 답변드리겠습니다!

1. 프로세스 동작 관련 질문

제가 프로세스 관련해서 공부를 하다가 추가적으로 Process Table이라는 개념을 알게 되었습니다. Process Table은 PCB 값을 빨리 찾을 수 있도록 PCB 참조 포인터를 가지며, 프로세스가 종료되어도 zombie process 형태로 Process Table에 남아 있다고 배웠습니다.

프로세스가 종료되어도 zombie process 형태로 Process Table에 남는다는 말에 조금 오류가 있습니다. 이렇게 된다면 모든 프로세스가 언젠가는 종료될 텐데 메모리를 계속 차지해 결국 어떠한 프로세스도 실행시키지 못하겠죠?
정상적인 프로세스는 종료되면 Process Table에서 제거됩니다.
하지만 정상적인 종료 신호를 주지 못해 Process Table에서 제거되지 않는 것도 있는데 이것을 ‘좀비 프로세스’라고 부르는 것입니다.

이 개념과 결합하여 몇 가지 질문 드립니다.

1-1. 강의에서 프로세스 종료 시 운영체제가 해당 프로세스의 PCB를 연결 리스트에서 제거한다고 하셨는데, 이때 PCB 자체가 사라지는 건가요? 아니면 PCB는 커널 어딘가에 저장되어 있고 연결 리스트에서만 제거 되는 건가요?

완전히 제거됩니다.
위에서 말씀드렸듯이 제거하지 않으면 금방 메모리가 부족해져서 프로그램들을 실행시키지 못하는 상황이 발생합니다.

1-2. 만약 PCB 자체가 사라지는 거라면 Process Table에 저장된 PCB 포인터도 사라지는 건가요? 그럼 Zombie Process는 어떻게, 왜 남아있는 건가요?

 위에서 말씀드린 내용으로 설명이 가능합니다.

 

2. 스케줄링 알고리즘 관련 질문

스케줄링 알고리즘 강의에서 큐에 프로세스의 정보가 담긴 PCB를 넣는다고 하셨습니다.

2-1. 여기서 PCB가 실제 PCB를 말하는 건지 PCB의 주소를 참조하는 참조값인지 궁금합니다.

구현은 운영체제 마다, 버전마다 다를 수 있습니다.
구현이 어떻게 됐는지 궁금하다면 코드를 확인해봐야겠죠?
리눅스에서 큐에 프로세스를 등록하는
enqueue_task() 함수를 살펴보시면 바로 알 수 있습니다.
(참고로 enqueue_task의 두 번째 인자 task_struct는 PCB(TCB)를 구현한 실체입니다.)

2-2. 만약 참조값이라면 Queue에서 PCB를 직접 참조하는 건지, 아니면 Process Table을 거쳐서 PCB를 찾는 간접 참조인지 궁금합니다.

 위에서 말씀드린 enqueue_task() 함수를 보시면 바로 알 수 있습니다.

 

3. 프로세스 생성 및 스케줄링 동작 정리

위 질문 사항을 제외하고 제가 이해한 게 맞는지 확인해주시면 감사하겠습니다.

메모리 공간은 경계 레지스터에 의해 운영체제 영역과 사용자 영역으로 나뉘며, 프로그램 실행 시 사용자 영역에 Process 1이 적재되면 운영체제 커널에는 PCB1이 생성됩니다. 스케줄링 알고리즘 역시 운영체제 커널에 저장되어 있으며 스케줄링 알고리즘 내부에서 준비큐가 동작하여 PCB1을 통해 Process 1의 상태 정보를 불러와 CPU를 할당하고 실행합니다. 이후 스케줄링 알고리즘에 따라 다음 PCB2를 통해 Process2를 실행하며 이 과정을 모든 Process가 종료될 때까지 반복합니다.

네 맞습니다.


운영체제를 공부하다 보면 구현이 궁금해지는 순간이 있습니다.
운영체제는 개론적인 내용으로 구현보다는 개념설명이 더 강한 경향이 있습니다.
실제 구현이 궁금하시면 개념을 모두 익히고 특정 운영체제를 골라서 커널 공부를 한다면 해당 운영체제의 구현 부분에 대한 궁금증을 모두 해결할 수 있습니다.

궁금증이 해결되셨나요? 😊

르르말님의 프로필 이미지
르르말
질문자

답변 감사합니다. 한 가지만 더 질문 드리면 강의에서 'PCB들은 연결리스트라는 자료구조로 저장된다'고 하셨는데, 그 연결리스트가 process table인 건가요? PCB와 Process Table의 관계가 감이 잘 안잡혀서요ㅠㅠ

감자님의 프로필 이미지
감자
지식공유자

맞습니다!
예전 유닉스에선 process table을 배열로 만들었지만 현재는 연결리스트를 사용합니다 :)
PCB는 하나의 프로세스의 정보를 저장하는 자료구조, process table은 PCB들을 저장하는 자료구조라고 생각하시면 헷갈리지 않을 것 같습니다 ㅎㅎ

르르말님의 프로필 이미지
르르말
질문자

아 이제 이해가 좀 되었습니다ㅠㅠ 감사합니다!

르르말님의 프로필 이미지
르르말

작성한 질문수

질문하기