안녕하세요? 허니입니다. 운영체제에서 가장 중요하다고 볼 수 있는 프로세스는 각 프로그램이 돌아가는데 있어 많은 역할을 하고 있습니다. 때문에 프로세스 관리가 매우 중요하기 때문에 프로세스가 어떻게 처리 되는지에 대해 잘 알아야 하기에 포스팅을 하겠습니다. 학생이나 연구원분들에게 많은 도움이 될 것이라고 생각하며 언제든지 질문은 환영입니다.
오늘의 주제
프로세스 관리는 왜 필요한가?
Process는 어떤 과정으로 처리되어지나?
프로세스 관리는 왜 필요한가?
하나의 컴퓨터 시스템이 오직 한 사람의 사용자만을 위해 존재하고 한번 컴퓨터가 작동할 때 하나의 프로세스만이 작업을 수행한다면 아마도 프로세스 관리라는 말은 나올 필요가 없었을 것이다. 그러나 이러한 시스템이 어딘가 존재한다면 그것은 이미 컴퓨터이기를 포기한 물건일 것이다. 이 시대 컴퓨터 시스템은 하나의 시스템 내에서 통신을 통해 파일을 다운 받으면서 한글 문서를 작성할 수 있듯이 동시에 여러 프로그램의 사용이 가능하다. 또한 대용량의 중앙처리컴퓨터를 놓고 여러 대의 모니터가 설치되어 사용되기도 하고 수천 명이 동시에 PC통신에 접속하기도 한다. 이렇듯 여러 작업이 동시에 이뤄질 때 프로세스들을 제대로 관리하지 않으면 처리가 느려질 것이다. 두말하지 않더라도 결과는 뻔할 것이다. 모든 시스템 사용자들은 자신이 요구한 결과들이 느릿느릿 처리된다면 엔터 키를 계속 내려치거나 대단히 화난 얼굴로 컴퓨터 모니터를 노려볼 것이다. 성격이 급한 사람은 당장 컴퓨터 회사에 전화를 걸어 고장신고를 할지도 모르겠다. 바로 이러한 문제를 피하기 위해 프로세스를 보호해주고 프로세스마다 작업 시간을 할당해주고 그 작업에 우선 순위를 매기는 등의 작업이 바로 프로세스 관리(process management)이다.
프로세스들은 어떤 과정으로 처리되어지나?
하나의 프로세스가 수행되는 동안 시스템 콜에 대한 작업은 어떻게 수행될까. 또한 우선순위가 높은 프로세스가 존재한다는 것은 과연 어떻게 알 수 있을까. 하나의 프로세스처리 과정 중 발생하는 이러한 문제를 해결하기 위해 시스템 설계자는 다음과 같은 조금은 복잡하다고 느껴지는 처리 과정을 구상해 내었다.
그림 1 프로세스 처리과정
위의 그림을 다시 한번 설명하자면,
1. 사용자 영역(user mode)에서 프로세스A가 수행되고 있다.
2. 시스템 콜이 호출된다. 수행되던 프로세스 A는 트랩이 걸리고 수행영역은 사용자영역(user mode)에서 커널영역(kernel mode)으로 이동된다.
3. 커널영역에서 호출한 시스템 콜 작업이 수행된다.
4. 작업 수행 후 상태에 따라 running 큐나, sleep 큐에 넣는다.
5. 프로세스A의 인터럽트 이후 처리를 수행하기 이전 보다 우선순위가 높은 프로세스가 있는가를 확인하기 위해 디스패춰(dispatcher)를 부른다.
6. 디스패춰를 통해 보다 우선순위가 높은 프로세스 B를 선택한다.
7. 프로세스B로 점프하여 먼저 처리한다.
잠깐, 상식!
* 사용자영역(user mode) : 컴퓨터 시스템의 영역 가운데 사용자에 의하여 요청된 프로그램에서 사용되고 있는 영역을 말한다. * 커널영역(kerel mode) : 프로그램이 OS에서 제공되는 기능을 이용하기 위하여 시스템콜 을 호출하여 현재 커널의 코드를 수행하고 있는 상태로 사용자가 요구한 작업을 시스 템 내부에서 처리하기 위하여 컴퓨터시스템이 차지하는 영역을 말한다. * 디스패춰 : 다중프로그래밍 시스템에서 대기열에 기다리고 있는 하나의 프로세스를 선택 하여 CPU의 사용권한을 부여하는 OS 스케줄러 프로그램의 한 부분. |
이와 같이 7가지 과정으로 나뉜 프로세스 처리 과정을 살펴보았다. 그러나 단순한 시스템은 1,2,3,1의 과정을 반복한다.
그림 2 1,2,3,1의 과정
그러나 보다 정밀한 OS는 우선순위가 보다 높은 프로세스가 존재하는가를 확인하고 그것을 처리하기 위해 4,5,6,7의 과정을 밟게 되는 것이다. 그렇다면 앞서 언급했던 문맥전환(context switching)은 어느 순간에 이뤄지게 되는 것일까. 바로 6과 7 사이에서 문맥전환이 일어나게 된다. 우선순위가 보다 높은 프로세스가 존재한다면 CPU는 자신이 처리하던 프로세스A를 잠시 멈추고 프로세스B를 수행하게 되므로 문맥전환이 일어나게 되는 것이다. 만약 더 이상 높은 우선순위의 프로세스가 존재하지 않아 프로세스 A가 다시 선택되면 문맥전환은 일어나지 않는다.
그림 3 문맥전환(context switching)
그렇다면 이와 같이 복잡한 과정으로 프로세스를 수행하는 이유는 뭘까. 많은 세월 시스템 설계자들은 어떻게 하면 프로세스를 보다 많이 보다 빠르게 또한 보다 효율적으로(보다 급한 처리를 원하는 프로세스는 보다 빠르게) 처리할 것인가를 고민해 왔다. 그 고민은 하나의 시스템 설계 목표를 세우는데 이르렀다. 바로 처리량(throughput)을 높이고 응답시간(response time)을 낮게 하는 것이었다. 바로 프로세스를 보다 많이 보다 빠르게 처리하기 위한 방법이 7가지 프로세스 처리 순서를 만들어내게 한 것이다.
잠깐, 상식!
*쓰루풋(throughput)이란? 주어진 시간에 시스템이 처리하는 일의 양 *반응 시간(response time)이란? 하나의 작업이 시작해서 끝날 때까지의 시간 |
지금까지 프로세스들이 어떤 방법으로 처리되는가에 대해 이야기해 보았다. 다음과 같은 질문들을 통해 보다 깊이 있는 내용을 살펴보자.
질문1) 커널영역에서 타임퀀텀이 다 되었을 경우에는 어떻게 수행하게 되나?
질문2) 디스패춰 호출을 했을 경우 프로세스A의 결과 값은 어느 영역에 저장되나?
질문3) 커널이 시스템 콜을 수행하고 있을 때 다른 프로세스가 수행될 수 있을까?
답1) 커널영역에서 타임퀀텀이 다 되었을 경우에는 적절한 순위의 수행큐에 저장되게 된다. 저장할 때 flag를 붙여놓아 다음에 취할 action을 표시하게 된다.
답2) 사용자 스택 (User stack) 즉 프로세스 스택에 결과값이 저장된다. (프로세스 스택의 개념은 이후 강의할 것임으로 일단은 설명을 접어두기로 하자.)
답3) 없다. 현재까지 CPU가 하나일 때를 가정한 것이기 때문이다. 여러 개의 프로세스를 만들어놨다 하더라도 실행 프로그램은 오직 하나이다.
요점정리
프로세스 관리란?
프로세스를 보호해주고 프로세스마다 작업 시간을 할당해주고 그 작업에 우선 순위를 매기는 등의 작업이 바로 프로세스 관리이다.
프로세스들은 어떤 과정?
1. 사용자영역에서 프로세스A가 수행되고 있다.
2. 시스템 콜이 호출된다. 수행되던 프로세스 A는 인터럽트가 걸리고 수행영역은 사용자영역에서 커널영역으로 이동된다.
3. 커널영역에서 시스템 콜을 호출한 작업이 수행된다.
4. 작업 수행 후 상태에 따라 수행, sleep queue에 넣는다.
5. 프로세스A의 인터럽트 이후 처리를 수행하기 이전 보다 우선순위가 높은 프로세스가 있는가를 확인하기 위해 디스패춰를 부른다.
6. 디스패춰를 통해 보다 우선순위가 높은 프로세스 2를 부른다.
7. 프로세스2로 점프하여 먼저 처리한다.
목 차 |
운영체제 메모리 관련해서 알아야 할 개념은 어떤것이 있나요? (TLB, Locality, Working Set, Overlay) |
운영체제 디스크 공간 할당(Disk Space Allocation) 알고리즘과 효과적 알고리즘의 판단 기준은? |
'Past Material' 카테고리의 다른 글
운영체제 스레드(Thread)는 무엇인가요? (0) | 2019.05.13 |
---|---|
운영체제 프로세스(Process)의 처리 속도는 어떻게 높일까? (0) | 2019.05.13 |
운영체제 프로세스 생애주기(Process Lifecycle)에 대해서 (1) | 2019.03.22 |
운영체제를 이해하기 위해 필요한 기본 개념들 (0) | 2019.03.20 |
운영체제의 목표와 역할이 미래에도 계속 증대될까요? (0) | 2019.02.09 |