본문 바로가기
운영체제

[OS] 스케줄러, 프로세스 생성, IPC - 운영체제와 정보기술의 원리 5장(2/2)

by BeforB 2021. 12. 13.
728x90

 

 

 

프로세스와 프로세스 문맥교환, PCB에 관한 내용은 이전 글에 자세히 정리되어 있다. 이번 포스팅에서는 프로세스의 스케줄링에 대해 자세히 알아보려고 한다.

 

[OS] 프로세스, 프로세스 문맥교환, PCB - 운영체제와 정보기술의 원리 5장(1/2)

프로세스(Process)란? 실행 중인 프로그램. 디스크에 실행파일 형태로 존재하던 프로그램이 메모리에 올라가서 실행되기 시작할 때 프로세스가 됨. 프로세스의 상태 1) 생성(New) 프로세스가 시작되

beforb.tistory.com

 

 

 

 

1.  스케줄러

어떤 프로세스에게 자원을 할당할지를 결정하는 운영체제 커널의 코드.

 

 

스케줄러의 구분

1) 장기 스케줄러(long term scheduler) == 작업 스케줄러(job scheduler)

- 어떤 프로세스를 준비 큐에 진입시킬지 결정.

- 프로세스에게 메모리를 할당하는 문제에 관여

- 수십 초~수 분 단위로 가끔 호출되기 때문에 상대적으로 속도가 느려도 됨

- 현재 시스템에선 잘 쓰이지 않음(장기 스케줄러 없이 시작 상태가 되면 바로 메모리에 할당해서 준비 큐에 넣어줌)

 

2) 단기 스케줄러(short term scheduler) == CPU 스케줄러

- 준비 상태의 프로세스 중 어떤 프로세스를 다음에 실행 상태로 만들 것인지 결정(CPU를 할당할 프로세스 결정)

- 타이머 인터럽트가 발생하면 호출됨

- 밀리초 단위로 빈번하게 호출되기 때문에 수행 속도가 빨라야 함

 

3) 중기 스케줄러(medium term scheduling)

- 너무 많은 프로세스에게 메모리를 할당해서 시스템 성능이 저하되는 경우 메모리에 적재된 프로세스 수를 동적으로 조절

- 메모리의 프로세스 중 일부를 통째로 빼앗아 디스크 스왑 영역에 저장(스왑 아웃)

- 스왑 아웃 0순위 : 봉쇄 상태 프로세스(당장 CPU를 획득할 가능성이 없기 때문에)

 

 

 

 

2. 프로세스 상태 - 중지 상태

중기 스케줄러의 등장으로 프로세스 상태에 중지 상태(Suspended, Stopped)가 추가됨

외부적인 이유로 프로세스의 수행이 정지된 상태.

 

메모리를 통째로 빼앗기고 디스크로 스왑 아웃 됨.

 

 

중지상태의 세분화

1) 중지 준비 상태

준비 상태의 프로세스가 중기 스케줄러에 의해 디스크로 스왑 아웃 되는 경우

 

2) 중지 봉쇄 상태

봉쇄 상태의 프로세스가 중기 스케줄러에 의해 스왑 아웃 되는 경우

 

 

 

 

 

3. 프로세스의 생성

시스템 부팅 후 최초의 프로세스는 OS가 생성.

그 이후의 프로세스는 이미 존재하는 프로세스(부모 프로세스)가 복제 생성(자식 프로세스).

 

 

프로세스의 종료

모든 자식 프로세스가 먼저 죽고, 부모 프로세스가 종료 됨

 

 

프로세스의 주소 공간

프로세스는 생성될 때 자신만의 독자적 주소 공간을 가짐(부모 프로세스가 있더라도 별도의 주소 공간을 가짐)

자식 프로세스를 생성할 때 부모 프로세스의 주소 공간 내용을 복사해서 생성.

 

 

프로세스 절차

부모 프로세스의 프로세스 ID를 제외한 모든 문맥(주소 공간 내용, PC, 레지스터 상태, PCB 및 커널스택 등)을 복사하여 사용.

따라서 자식 프로세스는 처음부터 시작하는 것이 아니라 부모 프로세스가 현재 수행한 시점(PC 지점)부터 수행하게 됨.

 

복제를 하고자 하는 프로세스가 특권명령인 fork()를 호출 

→ CPU 제어권이 커널로 넘어감

→ 커널은 fork()를 호출한 프로세스를 복제하여 자식 프로세스를 생성

 

 

유닉스 시스템 프로세스 계층도

 

 

 

특이한 점은 프로세스가 복제될 때 부모 프로세스의 기억을 그대로 가져오기 때문에 새로운 자식 프로세스는 부모프로세스에서 '새로운 자식을 복제했다'는 기억을 그대로 가져온다. 즉, '자신이 복제되었다.'가 아니라 '새로운 프로세스를 복제했다' 라는 기억을 가지게 된다.

 

복제된 프로세스라는 사실은 fork()함수의 결과 값으로 알 수 있다. 원본의 경우 결과값이 양수이고, 복제본은 0이다.

 

 

 

 

 

4. IPC

위에서 말했듯이 프로세스는 각자 자신만의 독립적인 주소 공간을 가지며 다른 프로세스의 주소 공간을 참조하는 것이 허용되지 않음.

하지만 경우에 따라 독립적인 프로세스 간에 협력할 때(처리 결과, 정보 공유) 효율성이 증진(처리 속도 향상)될 수 있다.

 

OS에서는 프로세스 간 협력을 위해 IPC(Inter-Process Communication)을 제공한다.

 

 

IPC(Inter-Process Communication)란?

하나의 컴퓨터 안에서 실행 중인 서로 다른 프로세스 간 발생하는 통신으로 대표적으로 두 가지 방식이 있다.

데이터의 불일치 문제가 발생하지 않도록 동기화가 보장되어야 한다.

 

 

1) 메시지 전달(message passing) 방식

프로세스 간 공유 데이터를 전혀 사용하지 않고 메시지를 주고 받으며 통신하는 방식

 

프로세스 간 메시지를 주고 받는 연산은 특권명령에 해당하기 때문에 각 프로세스는 커뮤니케이션 링크를 생성하여send(message)receive(message) 연산을 통해 메시지를 주고받을 수 있다.

 

 

커뮤니케이션 링크 구현 방법

1) 직접 통신 방법(direct communication)

통신하려는 프로세스의 이름을 명시적으로 표시. 두 프로세스 간 통신 시 사용

ex) 프로세스 P에게 메시지 전송 : send(P, message)

      프로세스 Q로부터 메시지를 받음 : recieve(Q, message)

 

직접 통신

 

 

2) 간접 통신 방법(indirect communication)

통신할 프로세스가 두 개 이상일 때 사용.

메시지를 메일박스나 포트(port)로부터 전달 받는 방식. 메일 박스에 고유 ID가 있고 해당 메일 박스를 공유하는 프로세스들끼리만 통신 가능.

ex) 메일박스 A에서 메시지 전송 : send(A, message)

      메일박스 A로부터 메시지를 받음 : recieve(A, message)

 

간접 통신

 

 

2) 공유 메모리(shared memory) 방식

프로세스들이 주소 공간의 일부를 공유하여 공유 메모리에 여러 프로세스가 읽고 쓰기가 가능하다.

원칙적으로는 독립적 공간을 사용해야 하지만 OS에서 공유메모리 시스템 콜을 지원하여 서로 다른 프로세스들이 일부를 공유할 수 있도록 한다.

공유 메모리에 대한 데이터 일치성 및 동기화는 커널이 책임지지 않으며 각 프로세스들이 관리해야 한다.

 

 

 

 

 

 

 

 

728x90

댓글