[CS 스터디] 운영체제 3일차 - Process1

강아람·2022년 12월 27일
0

운영체제

목록 보기
3/11
post-thumbnail

📚 프로세스

프로세스(Process)란?

프로세스는 디스크에 존재하는 프로그램 파일이 주기억장치(메모리)에 적재되어 CPU에 의해 실행과정에 있는 상태를 말한다.

  • 즉, CPU에 의해 현재 실행되고 있는 프로그램을 프로세스라고 한다.

  • 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다. 한 프로세스가 다른 프로세스의 자원에 접근하기 위해서는 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 한다. (커널이 제공하는 파이프, 파일, 소켓 등을 이용한 통신)


PCB (Process Control Block)

프로세스에 대한 자료 블록 또는 레코드

  • PCB 저장 내용

PID(프로세스 고유 번호), 상태(준비, 대기 실행 등), 포인터(다음 실행될 프로세스의 포인터), Register save area(레지스터 관련 번호), Priority(스케줄링 및 프로세스 우선순위), 할당된 자원 정보, Account(CPU 사용시간), 입출력 상태 정보

  • 프로세스 생성 시에 만들어지며 메인메모리에 유지됨
  • 운영체제의 모듈에 의해 판독되고 수정됨
  • 인터럽트가 발생하거나 다른 이유로 인해 CPU의 제어권이 다른 프로세스에게 넘어가게 되면 CPU의 레지스터에 다른 프로세스 정보가 저장되기 전에 현재 프로세스의 정보를 PCB에 저장
  • 프로세스의 실행이 종료되면 해당 프로세스의 PCB 삭제



프로세스의 메모리 구조

프로세스는 시스템으로부터 메모리 공간을 할당받는데 이 메모리는 Code, Data, Stack, Heap 영역으로 구성되어있다.

Code 영역

실행할 프로그램의 코드가 저장되는 영역 (CPU가 실행할 수 있는 기계어 명령 형태로 변환되어 저장됨)


Data 영역

전역변수와 정적변수가 저장되는 영역 (프로그램이 실행될 때 할당되어 프로그램 종료 시 소멸됨)

  • BSS(Block Stated Symbol) 영역 : 초기화되지 않은 변수를 저장하는 임시 공간, 초기화된 변수는 ROM에 저장되는데 비용 절감을 위해 BSS를 사용

Stack 영역

지역변수, 매개변수, 리턴값 등 잠시 사용된 후 사라지는 데이터와 함수 수행을 마치고 돌아갈 주소 가 임시로 저장되는 영역
(함수 호출 시 할당되고 함수가 종료되면 소멸, 로드 시점(컴파일)에 크기가 결정됨, 재귀함수가 반복해서 호출되거나 함수가 지역변수를 매우 많이 가지고 있을 경우 메모리가 초과하여 stack overflow가 발생할 가능성이 있음)


Heap 영역

필요에 의해 메모리를 동적으로 할당할 때 사용하는 동적 메모리 영역, 메모리 주소 값에 의해서만 참조되고 사용되는 영역
따라서, 프로그램 실행 시점(런타임)에 크기가 결정됨
(자바에서는 객체가 heap 영역에 생성되고 GC에 의해 정리됨)


사실 stack과 heap 영역은 같은 공간을 고유하는데 heap은 메모리의 낮은 주소부터 할당되고 stack은 높은 주소부터 할당된다. 각 영역이 상대 영역을 침범하면 heap overflow, stackoverflow가 발생한다.



📚 프로세스 상태 전이

프로세스 상태

New

프로세스를 생성하기 위해 프로그램이 보조기억장치에 있는 상태 (커널 공간에 PCB가 만들어진 상태)


Ready

프로그램이 메인 메모리에 적재되어 프로세스가 된 상태 (프로그램을 실행하는데 필요한 자원을 모두 얻은 상태)
CPU 자원을 할당받기 위해 대기하는 상태로, 준비 상태에 있는 프로세스들은 큐에서 대기


Running

CPU에 의해 실행되고 있는 상태


Waiting(or Block)

프로세스가 입출력 완료, 시그널 수신 등 어떤 사건(event)을 기다리고 있는 상태


Terminated

프로세스가 완전히 종료된 상태



프로세스 상태 전이

Admitted (new ▶ ready)

프로세스 생성이 가능하여 승인받는 과정


Dispatch (ready ▶ running)

준비 상태의 여러 프로세스 중 한 프로세스를 선정하여 CPU에 할당하는 과정


Interrupt (running ▶ ready)

할당된 CPU 시간이 지나면 Timeout Interrupt가 발생하여 CPU를 다른 프로세스에게 양도하고 자신은 ready 상태로 전이되는 과정
예외, 입출력, 이벤트 등이 발생하여 현재 실행중인 프로세스를 ready 상태로 바꾸고, 해당 작업을 먼저 처리하는 것


Block (running ▶ waiting) = I/O or event wait

  • I/O 등의 자원 요청 후 즉시 할당받을 수 없어, 할당받을 때까지 기다리기 위해 running에서 waiting 상태로 전이되는 과정
  • I/O 처리는 CPU가 아닌 I/O 프로세스가 담당하기 때문에 전이 발생

Wakeup (waiting ▶ ready) = I/O or event completion

필요한 자원이 할당되면 프로세스는 waiting에서 ready 상태로 전이되는 과정



📚 프로세스 관리

프로세스 계층 구조

  • 프로세스는 실행 중 프로세스 생성 시스템을 호출해서 새로운 프로세스 생성
  • 이때, 프로세스 생성 순서가 저장되고 부모/자식 관계를 유지하며 계층적으로 생성됨
  • 여기서 생성하는 프로세스는 부모 프로세스(Parent Process), 생성되는 프로세스를 자식 프로세스(Child Process) 또는 서브 프로세스(Subprocess)가 됨
  • 부모 프로세스와 자식 프로세스는 PCB를 공유하지 않음

운영체제는 계층 프로세스를 관리하기 위해 6가지 작업 수행



프로세스 관리

1. 프로세스 생성

  • 새로운 프로세스에 프로세스 식별자 할당
  • 프로세스에 메모리(주소 공간) 할당
  • 프로세스에 대한 PCB 생성(PCB 공간 할당)
  • PCB 초기화
  • 생성된 프로세스는 준비 상태가 되어 큐의 마지막 순서에서 대기

여러 개의 프로세스가 같은 프로그램을 사용할 경우, code 영역은 공유하고 나머지 영역은 프로세스마다 개별적으로 할당


2. 프로세스 종료

  • 프로세스가 마지막 명령의 실행을 끝내면 종료되고, 운영체제에 인터럽트를 발생시키거나 시스템 콜로 중지 명령을 전달해 프로세스 삭제를 요청

3. 프로세스 제거

  • 프로세스를 제거하면 프로세스에 할당된 자원을 시스템에 돌려주고 해당 프로세스의 PCB가 회수됨
  • 부모 프로세스가 제거되면 해당 프로세스의 자식 프로세스도 제거됨

4. 프로세스 중단과 재시작

  • 자원을 효율적으로 사용하기 위해 프로세스 중단 상태를 이용
  • 프로세스를 중단시키면 특정 이벤트의 발생을 기다리는 대기 상태가 되었다가 해당 이벤트가 발생하면 즉시 실행 상태로 변할 수 있어 유휴 시간이 감소

5. 프로세스 우선순위 변경

  • 프로세스에는 우선순위가 존재하며 준비 상태에 있는 프로세스 중 프로세서 중심 프로세스(속도가 빠른 디스크 입출력 프로세스)는 낮은 우선순위, 입출력 중심 프로세스(속도가 느리면서 빠른 응답을 요구하는 프로세스)는 높은 우선순위를 가짐
  • 우선순위가 낮은 프로세스에는 시간 할당량을 크게 제공하고 우선순위가 높은 프로세스에는 시간 할당량을 적게 제공

6. 문맥 교환

  • 프로세스를 다른 프로세스로 교환할 때 이전 프로세스의 상태 레지스터 내용을 보관하고, 다른 프로세스의 레지스터를 적재하는 일련의 과정
  • CPU의 제어권이 다른 프로세스로 이양되는 과정
  • 문맥 교환 시 실행되고 있던 프로세스 A는 현재 상태(문맥)를 자신의 PCB에 저장하고 CPU를 할당받은 프로세스 B는 예전에 저장했던 자신의 문맥을 PCB로부터 실제 하드웨어로 복원시키는 과정을 거침
  • 이때 문맥 교환에 필요한 시간, 메모리 등을 오버헤드라고 부름



📚 Context Switching (문맥 교환)

CPU가 이전 프로세스의 상태를 해당 프로세스의 PCB에 보관하고 다른 프로세스의 정보를 PCB에서 읽어 레지스터에 적재하는 과정

  • 인터럽트가 발생한 경우
  • 실행중인 프로세스가 CPU 사용을 허가받은 시간(Time Quantum)을 모두 소모한 경우
  • I/O 입출력을 위해 대기해야 하는 경우

질문 1

Context switching(문맥 교환)에 대해 간략히 설명하고, Context switching이 필요한 이유를 말해주세요.

Context switching이란 CPU가 현재 실행하고 있는 프로세스에 대한 정보를 프로세스의 PCB에 저장하고, CPU 제어권을 할당받을 다음 프로세스의 정보를 해당 프로세스의 PCB에서 읽어와 레지스터에 저장하는 과정입니다. 만약 인터럽트나 입출력 이벤트로 인해 CPU가 멈추어 가만히 있다면 CPU의 유휴 시간(작동하지 않는 시간)이 길어져 자원의 낭비를 초래하기 때문에 문맥교환의 overhead를 감수하더라도 다른 프로세스를 실행하는 것이 낫기 때문에 문맥 교환이 필요합니다.

질문 2

프로세스 생성 과정에 대해 간단하게 설명하세요.

프로세스 생성을 위해 새로운 프로세스의 식별자를 할당합니다. 그리고 메모리(주소 공간)와 PCB를 할당하고, PCB를 초기화 합니다. 생성된 프로세스는 Ready(준비) 상태가 되어 해당 큐의 마지막 순서에서 대기 합니다.

0개의 댓글