본문 바로가기

CS/운영 체제

3.1 프로세스의 개념

 

3.1 프로세스의 개념
3.1.1 프로세스의 개념
3.1.2 로딩
3.1.3 프로세스의 생명 주기
3.1.4 프로세스 관리, PCB
3.1.5 멀티 프로세스
3.1.6 생각해야 할 문제

 


3.1.1 프로세스

우리가 평소에 사용하는 exe파일과 txt파일을 비교해보자. exe 파일은 더블 클릭 등의 입력을 주었을 때 '실행'되지만, txt 파일은 실행되지 않는다. 왜 일까? 바로 exe 파일은 실행가능한 파일로 규정되어있기 때문이다. 이와 같은 exe 파일은 운영체제가 프로세스를 초기 구동하는데 사용되는 파일이다. 운영체제는 이러한 Executable한 파일을 읽어들여서 프로그램을 실행한다.

 

그리고 이 Executable한 파일이 메모리에 로딩이 되어 실행이 되면 그 때 프로세스라고 부를 수 있다. 모든 프로그램들은 반드시 메모리에 올라가야 실행 될 수 있기 때문이다.

 

따라서 프로세스란 다음과 같이 정의할 수 있다.

  • 주기억장치에 상주된 프로그램이 CPU에 의해 처리되는 상태
  • CPU에 의해서 현재 실행되고 있는 프로그램
  • 실행을 위해 메모리에 올라온 동적인 상태
  • PCB의 존재로서 명시되는 것
  • 프로세서가 할당되는 개체로서 디스패치가 가능한 단위 (디스패치 : 준비 단계에서 실행 단계로 넘어가는 것)
  • 비동기적 행위를 일으키는 주체
  • CPU가 할당되는 실체
  • 운영체제가 관리하는 최소 단위의 작업(프로그램)
  • task란 용어와 함께 사용되며, 다양한 정의를 가짐
  • 프로그램과 달리 메모리에 주소 공간을 갖는 능동적인 객체

3.1.2 로딩

로딩이라는 단어는 많이 들어보았을 것이다. 보통 기다리는 상황에서 로딩이라는 표현을 사용한다. 우리는 이 표현을 정확히 알아볼 필요가 있다.

 

먼저 로더 loader 라는 단어를 알아야한다. 로더는 메모리에 적재, 즉 Load 해주는 행위를 말한다. 위에서 우리는 프로세스가 메모리에 적재된, 즉 로딩이 된 프로그램이라는 것을 배웠다. 우리가 로딩을 기다리는 것은 프로그램이 메모리에 적재되는 것을 기다리는 것이라고 말할 수 있다.

 

이러한 로더에는 몇 가지 종류가 있다. 

  1. 절대로더 : 항상 고정된 위치에만 로딩됨, 재배치 및 링킹이 없음. 다중 프로그래밍 X.
  2. 재배치 로더 : 프로그램이 여러 개 실행되다보면, 메모리 위치 상 충돌이 있을 수 있다. 주기억 장치의 상태에 따라 목적 프로그램을 주기억 장치의 임의 공간에 적재한다.
  3. 동적 적재 : 필요한 부분만 주기억장치에 적재하고 나머지는 보조 기억장치에 저장한다.

3.1.3 프로세스의 생명주기

 컴퓨터에 있는 모든 프로그램을 전부 메모리에 적재시켜 놓을 수 있겠다면 좋겠지만, 메모리에는 한계가 있고 따라서 프로세스는 생성과 종료를 반복하게된다. 다음 그림을 하나씩 살펴보도록 하자.

 먼저 생성 new 이다. 프로세스가 생성된 직후이며, 이 때 프로세스는 PCB를 할당받는다. 이렇게 갓 태어난 프로세스는 준비상태 ready 로 넘어가 자신의 차례를 기다린다. 일반적으로는 준비 큐에서 대기한다.

 

 대기하고 있는 프로세스의 차례가 되면 CPU가 준비 큐에서 꺼내 작업을 실행하는데 이것을 디스패치라고 한다. CPU가 작업을 실행하고 있는 동안 프로세스는 실행상태 running가 된다. 그런데 만약 할당된 CPU 사용시간을 넘어버리거나 (time out) 스스로 CPU의 사용을 양보하면 다시 준비 상태에 들어간다.

 

 준비 상태와는 다른 대기 상태 waiting에 빠질 때도 있다. 바로 입출력, 혹은 다른 자원이 필요할 때이다. 이렇게 된다면 프로세스는 필요한 자원이 도착할 때까지 대기 큐에 삽입된다. 대기큐는 준비큐와는 달리 자원 요청을 하여 완료를 기다리는 상태의 프로세스들이 '대기'하고 있다. 준비되지 않았다고 생각하면 편하다. 만약 자원 할당이 완료되어 다시 준비가 된다면 준비큐로 돌아가 CPU의 부름을 기다린다.

 

 실행이 완료되었으면 프로세스는 종료 terminated 된다. 물론 외부로부터 강제로 종료되는 경우도 있다.  완료된 프로세스는 PCB가 제거되고 작업이 끝이 난다.

 

 다음은 프로세스의 생성과 종료 과정을 표로 정리한 것이다.

 

 보편적이지는 않지만 보류 상태 또한 존재한다. 프로세스가 '어떠한 이유로 인해' 실행이 미뤄지고 메모리에서 쫓겨난 상태를 의미한다. 메모리가 꽉 찼다거나, 프로그램에 오류가 있거나, 문제가 있어 격리되었거나, 입출력이 지연되거나 혹은 매우 긴 주기로 실행되는 프로세스의 경우 보류 상태에 들어가는 경우도 있다.

3.1.4 프로세스 관리, PCB

 지금까지 프로세스의 개념과 생성 · 소멸 주기에 대해 살펴보았다. 이러한 프로세스들은 당연하게도 생성부터 종료까지 모두 커널, 즉 운영체제에 의해 관리된다. 프로세스의 생명주기부터 정보 관리, 통신 및 동기화, 문맥 교환까지 전부 커널이 관리하는 것이다. 커널은 프로세스의 관리를 쉽게 하기 위해 프로세스마다 일종의 딱지, PCB를 부여한다.

 

 PCB란 Process Control Block의 약자로 운영체제가 프로세스를 제어하기 위해 프로세스의 상태 정보를 저장하는 자료구조이다. 프로세스마다 고유의 PCB가 생성되며 프로세스가 종료되면 폐기된다.

 

 PCB의 구조는 다음과 같다. 이는 OS마다 다르다. 이러한 정보들을 프로세스의 Context라고도 한다. 이후 나올 Context switching과 연관된 내용이다.

3.1.5 멀티 프로세스

 이제 다시 컴퓨터의 전반적인 작동 과정으로 돌아와보자. 메모리에 적재되어있는 프로세스는 당연히 여러 개이다. 실제로 우리는 컴퓨터를 사용할 때, 여러개의 프로그램을 동시에 돌린다. 실제로 여러 프로세스들이 메모리에 동시에 있을 수 있는데 이를 다중 프로그래밍이라고 한다. 또한 같은 프로그램이어도 실행될 때마다 독립된 프로세스를 생성하기 때문에 하나의 프로그램은 여러 프로세스가 될 수 있다. 간단히 생각해서 우리가 크롬 탭을 여러개 열면 그 개수만큼 크롬 프로세스(1), 크롬 프로세스(2) ... 가 나열되는 것이다. 지금 티스토리를 작성하며 크롬만 17개 정도 열고 있는 상태라 조금 반성하게된다.

 

 그런데 CPU가 처리할 수 있는 프로세스는 한 번에 하나씩이다. 하지만 방금 말했듯 지금 나는 크롬 탭 17개와 이클립스, 파워포인트, 한글, 가우스 뷰, 기타 프로그램을 연 상태로 동시에 처리하고 있다. 어떻게 여러 개의 프로세스를 동시에 처리할 수 있을까? 여기서 시분할의 개념이 등장한다.

 

시분할 Time-slicing

 시분할을 한 마디로 정리한다면 프로세스들에게 번갈아가며 CPU를 사용하게 하는 일이다. 진짜 동시에 실행되는 것이 아니다. 그렇다면 여기서 하나의 문제가 발생한다. 어떻게, 어떤 순서로 번갈아가며 작업하게 할 것인가?

 

어떤 순서로 '번갈아가며' 작업하게 하지? → 스케쥴링

어떻게 번갈아가게 하지? → Context switching

 

 지금은 Context switching, 즉 문맥 교환에 대해서 알아보겠다.

 

문맥교환 Context switching

 문맥 교환은 한 프로세스에서 다른 프로세스로 CPU를 넘겨주는 과정이다. 실행 상태에서 나가는 프로세스의 PCB에는 지금까지의 작업 내용을 저장하고, 반대로 실행 상태로 들어오는 프로세스의 PCB의 내용을 CPU가 다시 세팅하는 것이라고 생각하면 된다.

3.1.6 문제들

 운영체제는 컴퓨터가 발전해가며 등장한 문제를 해결하기 위해서 새로운 해결방안이 나오고, 그 해결방안이 불러온 문제를 해결하기 위한 또 다른 해결 방안이 생기는 구조의 과목이다. 따라서 항상 맥락을 잘 살펴야 이해가 편하다.

 

 지금까지 우리가 이해한 것들을 살펴보자. 프로그램은 로더를 통해 메모리에 적재됨으로써 비로소 프로세스가 된다. 이 한 문장에서도 나오는 의문점들이 많다. 

 

그럼 로더는 누가 '실행'하는 것일까?

메모리의 어디에, 어떻게 적재해야할까? Allocation 문제

만약 프로그램의 크기가 아주 크다면 어떻게 해야할까?   가상 메모리 및 Paging

Context switching이 Suspend에 걸쳐 이루어진다면?   Swapping 및 단편화 문제

어떤 프로세스가 다른 프로세스의 메모리 영역을 침범한다면?   보안문제

 

이런 의문들을 해결하기 위하여 다음 포스트에서부터는 프로세스의 메모리 구조에 대해 알아볼 것이다.

'CS > 운영 체제' 카테고리의 다른 글

3.3 프로세스의 생성과 복사  (1) 2024.04.20
3.2 프로세스 메모리 구조  (1) 2024.04.17
3.0 프로세스  (1) 2024.04.17
2.1 컴퓨터 구조  (1) 2024.04.14
1.2 운영체제의 구조  (0) 2024.04.11