운영체제 3장 - Processes

어흥·2024년 5월 3일

Computer Science

목록 보기
3/28

Process

프로세스는 실행 중인 program 혹은 메모리에 로드된 프로그램이다.

현대 os는 multi threads를 다루는 Process를 지원한다.

프로세스의 메모리 배치

text, data 부분은 고정되며, stack과 heap 부분은 동적으로 바뀐다.

  • text: 실행 코드
  • data: 전역 변수
  • Heap: 프로그램 실행 중에 동적으로 할당되는 메모리
  • Stack: 함수를 호출할 때 임시 데이터 저장 장소
    함수 매개변수, 지역변구

Process State

  • new: process 생성
  • ready: cpu에게 할당되기를 대기하는 상태
  • running: 프로세스의 instruction이 실행 중인 상태
  • waiting: 입출력이나 특정 이벤트 발생를 기다리는 상태이다.
  • terminaged: 실행 종료 상태

PCB

특정 프로세스와 연관된 모든 정보의 저장소이다. doubly linked list로 구현된다.

  • process state: new, ready, running, waiting, halted
  • program counter: 다음 실행될 명령어 주소
  • cpu registers: cpu의 각종 레지스터의 상태 정보 저장
  • cpu scheduling: 프로세스 우선순위,, 스케줄 큐에 대한 포인터 정보 저장
  • 메모리 관리 정보:
  • accounting 정보
  • 입출력 상태 정보

Thread

프로세스 안에 하나의 작업의 단위를 말한다.

multi thread

  • process가 여러 실행 thread를 가지고 한 번에 하나 이상의 task를 실행

Process Scheduling

multi programming: 여러 process들이 실행하도록 하여 CPU 이용률을 최대화한다.

Time sharing: process 사이에 CPU를 자주 switch한다.

Scheduling Queue

  • 프로세스가 시스템에 진입하면 → Ready Queue에 삽입되어 cpu에서 실행되기를 ready/wait 한다.
  • ready queue, wait queuesms Linked list 형태로 저장된다.
  • queue의 head는 PCB의 첫 포인터를 가지고 각 pcb는 다음 pcb의 포인터를 가진다.

CPU Scheduling

CPU Scheduler 역할

ready queue에 있는 하나의 process를 선택하고 cpu를 할당한다.

swapping

메모리 과부화 상태일 때 프로세스를 제거하는 것을 말한다. 메모리가 초과 사용되어 해제되어야 할 때만 필요

  • swapped out → 메모리 → 디스크
  • swapped in → 디스트 → 메모리

Context Switch

context란 현재 실행되고 있는 process의 PCB에 저장된 내용을 말한다.

interrupt가 발생 시 cpu에서 실행 중인 현재 context를 저장하고 interrupt 처리가 끝나면 context를 복원한다.

이처럼 다른 process에게로 cpu를 switch하는 것을 말한다.

아래 그림 처럼 p0 프로세스 실행 중 interrupt나 system call이 발생하면 현재 프로세스 상태를 PCB_0에 저장하고 실행할 새로운 프로세스의 PCB1를 load한다.

  • pure overhead: 스위칭 동안 쓸모있는 일을 하지 않고 하드웨어 지원에 의해 크게 좌우

Operations on Processes

프로세스 생성

  • 프로세스가 실행되는 동안 여러개의 새로운 프로세스들을 생성할 수 있다.
    이때 생성한 프로세스 = 부모, 생성된 프로세스 = 자식
  • pid(Process Identifier) : 고유한 프로세스 아이디
  • 자식 프로세스를 생성할 때, 자식 프로세스의 자원을 운영체제로부터 직접 얻거나 부모가 가진 자원의 부분 집합만 사용하도록 제한할 수 있다.
  • 부모 자식을 실행할 때 1) 부모/자식 병렬 실행 2) 부모가 자식이 종료될 떄 까지 기다릴 수 있다.
  • 주소 공간 측면에서 볼때 1) 자식 프로세스는 부모 프로세스의 복사본이면 부모와 동일한 프로그램과 데이터를 가진다. → fork() 2) 자식 프로세스가 자신에게 적재될 새로운 프로그램을 가지고 있다

프로세스 종료

  • 프로세스가 마지막 문장의 실행을 끝내고, exit 시스템 콜을 사용하여 운영체제에 자신의 삭제를 요청하면 종료한다.
  • 이 시점에서 프로세스는 자신을 기다리고 있는 부모 프로세스에 (wait 시스템 콜을 통해) 상태값(통상 정수값) 을 반환할 수 있다
  • 부모 프로세스가 종료되면 자식 프로세스도 종료된다.
  • 좀비 프로세스 종료되었거나 부모가 아직 wait()를 호출하지 않은 process 부모가 wait()를 호출하면 좀비 process의 pid와 pcb의 항목이 해제됨
  • 고아 프로세스 부모가 wait()를 호출하지 않고 종료한 경우 → pcb에 정보가 계속 남음

Interprocess Communication

프로세스 간 통신이 필요한 이유

  1. 정보 공유
  2. 계산 가속화
  3. 모듈성

Shared Memory

  • 공유 메모리 영역을 만들 때만 system call이 일어나므로 빠르다.
  • 공유 메모리 영역은 공유 메모리 segment를 생성하는 process의 주소 공간에 위치한다.
  • 공유 메모리가 만들어지면 모든 접근이 일상적인 접근으로 취급되고 커널의 도움이 필요없다.
  • 공유 메모리는 둘 이상의 프로세스가 접근하지 않게 제어해야 한다.

Message Passing

  • 작은 data를 교환할 때 유용
  • 분산 system 환경에서 구현이 쉽고 느리다.
  • 최소 send(), receiver() 2가지 연산을 제공한다.
  • 하나의 링크와 send()/receive() 연산을 논리적으로 구현하는 방법은 3가지 있다. 1) 직접 또는 간접 통신 2) 동기식 또는 비동기식 통신 3) 자동 또는 명시적 버퍼링

0개의 댓글