Scribbling

운영체제 - 3 본문

Computer Science/Computer Knowledge

운영체제 - 3

focalpoint 2021. 10. 3. 18:11

 

 

1. 프로세스의 개요

1.1 프로세스

프로세스는 하나의 작업 단위이다. 프로그램은 하드디스크 같은 저장장치에 보관되어 있다가 마우스로 더블클릭하면 실행된다. 이 때, 실행된다는 것은 정적인 상태의 프로그램이 메모리에 올라와서 동적인 상태의 프로세스가 되는 것을 의미한다.

1.2 시분할

CPU가 1개인 컴퓨터에서 여러 개의 프로세스가 동시에 실행되는 것은, CPU가 시간을 쪼개어 여러 프로세스에 적당히 배분하기 때문이다.

1.3 프로그램에서 프로세스로의 전환

프로세스는 컴퓨터 시스템의 작업 단위로 태스크(task)로도 불린다. 운영체제는 프로그램을 메인 메모리로 올린다. 그리고 프로세스에 '프로세스 제어 블록(Process Control Block)'을 준다. 즉, 프로그램이 프로세스가 되었다는 것은 운영체제로부터 프로세스 제어 블록을 받았다는 의미이다.

1.4 프로세스의 상태

- 생성 상태: 프로세스가 메모리에 올라와 실행 준비를 완료한 상태로, PCB가 생성된다.

- 준비 상태: 생성된 프로세스가 CPU를 기다리는 상태이다. 준비상태에는 다수의 준비 큐가 운영된다.

- 실행 상태: CPU를 통해 실제 작업을 수행한다. 주어진 시간 내에 작업이 완료 되지 않으면 프로세스는 다시 준비 상태로 돌아온다.

- 완료 상태: 프로세스가 작업을 마쳐 PCB를 반환한 상태이다.

- 대기 상태: 프로세스가 입출력을 요구하는 경우, 입출력이 완료될 때까지 기다리는 상태를 대기 상태라고 한다. 대기 상태의 프로세스는 요청한 입출력이 완료되면 입출력 관리자로부터 인터럽트를 받는다.

준비 상태에 있는 프로세스 중 다음에 실행될 프로세스는 'CPU 스케줄러'가 결정한다. CPU 스케줄러는 다음 실행될 프로세스의 제어블록을 CPU에 전달하여 작업이 진행되도록 하는데, 이를 디스패치(dispatch)라고 한다.

 

2. 프로세스 제어 블록

2.1 프로세스 제어 블록의 구성

- 포인터: 대기 상태의 프로세스를 위하여 준비상태와 유사하게 다수의 대기 큐가 운영된다. 이 때 프로세스는 입출력 장치에 따른 대기 큐끼리 모인다. 이는 프로세스에 인터럽트를 전달하는 시간을 최소화하기 위함이다.

- 프로세스 상태

- 프로세스 구분자

- 프로그램 카운터

- 프로세스 우선 순위: 대기 상태의 큐는 우선순위 별로 따로 운영된다.

- 레지스터 정보: 자신이 사용하던 레지스터의 중간값을 보관한다.

- 메모리 관련 정보: 경계 레지스터, 한계 레지스터 값, 세그멘테이션 테이블, 페이지 테이블

- 할당된 자원 정보: 입출력 자원 혹은 open file

- 계정 정보: CPU 할당/사용 시간 등

2.2 문맥 교환

CPU는 한 번에 하나의 프로세스만 연산할 수 있다. 하나의 프로세스에서 다른 프로세스로 전환할 때 제어 블록을 교환하는데, 이를 문맥 교환이라고 한다.

 

3. 프로세스의 연산

3.1 프로세스의 생성과 복사

A. fork() 시스템 호출

fork() 시스템 호출은 실행 중인 프로세스로부터 새로운 프로세스를 복사하는 함수이다. 커널에서 제공하는 이 함수는 프로세스를 복사하는 시스템 호출이다. 인터넷 익스플로러에서 새로운 탭을 활성화 하는 경우가 이에 해당된다. 인터넷 익스플로러를 킬 때 보다, 새로운 탭을 활성화 하는 시간이 훨씬 짧다. 이는 fork() 시스템 호출을 이용하기 때문이다.

프로세스를 복사할 때 기존의 프로세스는 부모 프로세스가 되며, 새로 생긴 프로세스는 자식 프로세스가 된다. fork() 시스템 호출 시 프로세스 제어 블록을 포함한 부모 프로세스 영역의 대부분이 자식 프로세스에 복사된다.

fork() 시스템 호출은 프로세스의 생성 속도가 빠르며, 추가 작업 없이 자원이 상속 가능하다는 장점이 있다.

B. exec() 시스템 호출

exec() 시스템 호출은 기존의 프로세스를 새로운 프로세스로 전환하는 함수이다. exec()는 기존의 프로세스 영역을 그대로 사용하되 그 내용을 바꾼다. 이 필요성에 대해 의구심을 가질 수 있는데, exec() 시스템 호출을 사용하면 이미 만들어진 프로세스 제어 블록, 메모리 영역, 부모-자식 관계를 그대로 사용할 수 있다는 점이 장점이다. 

C. wait()

wait()문은 자식 프로세스와의 동기화를 위한 코드이다. 자식 프로세스가 끝날 때까지 부모 프로세스가 기다린다. 이는 부모 프로세스와 자식 프로세스 중 어느 것이 먼저 동작할지 모르는 문제를 해결할 수 있다.

3.2 프로세스의 계층 구조

fork() 및 exec() 시스템 호출은 프로세스의 계층 구조를 이해하는 데 도움이 된다. 유닉스에서 커널이 처음 메모리에 올라와 부팅이 되면 커널 관련 프로세스를 여러 개 만드는데, 그 중 init 프로세스는 전체 프로세스의 출발점이 된다. init 프로세스는 일반 사용자 프로세스의 맨 위에 위치하고, fork()와 exec() 시스템 호출을 통해 자식 프로세스를 만든다. 이러한 프로세스의 계층 구조는 종료된 프로세스의 자원을 회수하는 데 유용하다.

shell 프로세스에서 명령어로 응용 프로그램을 실행할 때도 마찬가지로 fork() 및 exec() 시스템 호출을 이용한다.

3.3 고아 프로세스

자식 프로세스가 종료되기 전에 부모 프로세스가 종료되어 버린다면, 자식 프로세스의 자원을 회수할 방법이 없어진다. 이러한 프로세르를 고아 프로세스라고 한다. exit() 혹은 return()문은 자식 프로세스가 작업이 끝났음을 부모 프로세스에 알리는 것이다.

* 컴퓨터를 오래 켜두면 느려지는 이유도 이와 관련이 있다. 오래 사용하다보면 이러한 고아(좀비) 프로세스가 메모리를 갉아 먹기 때문이다.

 

4. 스레드

4.1 스레드

운영체제는 코드와 데이터를 메모리로 가져오고, 프로세스 제어 블록을 생성하고, 메모리를 확보하고, 준비된 프로세스를 준비 큐에 삽입한다. 프로세스가 생성되면 CPU 스케줄러는 프로세스가 해야할 일을 CPU에 전달하고 실제 작업을 CPU가 수행한다. 이 때 CPU 스케줄러가 CPU에 전달하는 일 단위가 스레드이다. 프로세스는 독립적이고 스레드는 프로세스 내부에서 서로 연결되어 있다.

4.2 용어 정리

- 멀티스레드: 프로세스 내 작업을 여러 개의 스레드로 분할하는 방식. 

- 멀티태스킹: CPU의 시분할을 통해 동시에 여러 개의 프로세스를 처리하는 방식.

- 멀티프로세싱: CPU를 여러 개 사용하여 어러 개의 스레드를 동시에 처리하는 작업 환경.

- CPU 멀티스레드: 하나의 CPU로 동시에 여러 스레드를 처리하도록 만든 하드웨어적 병렬 처리 기법.

* 오늘날의 운영체제는 프로세스 내의 다양한 스레드를 여러 개의 코어에 배분함으로써 효율을 높인다. (프로그램 또한 여러 개의 스레드로 작성된다)

4.3 멀티스레드

멀티스레드는 멀티태스킹(여러 개의 프로세스)의 낭비 요소를 줄이기 위해 사용한다. 유사한 일을 하는 2개의 프로세스를 만드는 대신, 코드 및 데이터 등을 공유하면서 2개의 일을 하나의 프로세스 내에서 처리되도록 하는 것이다.

예컨대, 앞에서 언급한 fork() 시스템 호출을 사용하면 여러 개의 프로세스를 만들 수 있다. 그러나 이 경우, 불필요한 정적 영역(코드, 전역 데이터, 파일)이 여러 개 생긴다. 반면 멀티스레드는 이러한 정적 영역을 공유함으로써 자원의 효율성을 도모한다.

비디오 플레이어를 떠올려보자. 비디어 플레이어의 입출력과 재생을 단일 스레드로 구성한다면, 입출력이 끝날 때까지 전체 스레드는 대기 상태에 머물러야 한다. 반면 입출력과 재생을 멀티 스레드로 구성한다면, 입출력과 관계 없이 재생이 가능할 것이다.

* 멀티스레드의 장점: 응답성 향상 / 자원 공유 / 효율성 / 다중 CPU 지원

* 멀티스레드의 단점: 하나의 스레드에서 문제가 생기면, 프로세스 자체를 종료해야 한다.

 

 

'Computer Science > Computer Knowledge' 카테고리의 다른 글

운영체제 - 5  (0) 2021.10.08
운영체제 - 4  (0) 2021.10.05
운영체제 - 2  (0) 2021.09.27
운영체제 - 1  (2) 2021.09.17
컴퓨터의 구조 - 9  (0) 2021.09.10