[운영체제]3. 프로세스

sai06266·2023년 9월 4일
0

운영체제

목록 보기
3/8

프로세스 개념

  • 운영체제는 다양한 프로그램들을 실행한다.
  • 실행중인 프로그램 -> 프로세스
  • 프로세스는 다음을 포함한다.
    • 텍스트 섹션(text section), 프로그램 코드
    • 데이터 섹션(data section), 전역 변수
    • 스택(stack), 함수의 매개변수, 리턴 주소, 지역 변수
    • 힙(heap), 동적으로 할당되는 메모리
    • 프로그램 카운터(program counter), 실행 중인 프로그램 다음에 실행할 명령어의 메모리 주소

프로세스 상태

프로세스는 실행되면서 그 상태가 변한다.

  • New
    - 프로세스를 생성한다.
  • Running
    - 명령어들이 실행되고 있다.
  • Waiting(blocked, sleep)
    - 프로세스가 어떤 사건이 일어나기를 기다린다.
  • Ready
    - 프로세스가 프로세서에 할당되기를 기다린다.
  • Terminated
    - 프로세스의 실행이 종료되었다.

Diagram of Process State


Process Control Block(PCB)

PCB : 운영체제가 프로세스에 대한 중요한 정보를 저장해 놓을 수 있는 저장 장소,
데이터를 관리하기 위한 메타데이터
구성 요소

  • Process ID
    - 프로세스의 고유 번호
  • Process state
    - new, ready, running, waiting, terminated 등의 실행 상태
  • Program counter
    - 다음에 실행될 명령의 주소
  • CPU registers
    - 스택 보인터, 일반적인 리지스터
  • CPU scheduling information
    - 스케줄링 정보
  • Memory-management information
    - 할당된 자원 정보
  • Accounting information
    - CPU 사용량
  • I/O status information
    - 할당된 입출력 장치

Process Scheduling Queues

프로세스는 수행하면서 상태가 여러 번 변하는데 이에 따라 서비스를 받아야하는 곳이 다르다. 그리고 프로세스는 일반적으로 여러 개가 한 번에 수행되므로 그에 따른 순서가 필요하다. 이러한 순서를 대기하는 곳을 큐(Queue)라고 부른다.

  • Ready queue
    - 메인 메모리에 상주하면서 실행을 기다리는 모든 프로세스들의 집합
  • Device queue
    - 입출력 장치를 기다리는 프로세스들의 집합
  • 프로세스는 다양한 큐를 이동한다.

Scheduler(스케줄러)

CPU scheduler

  • 다음으로 수행될 프로세스를 선택하고 CPU에 할당

프로세스들은 다음과 같이 분류될 수 있다.

  • I/O-bound 프로세스
    • 계산보다 입출력에 많은 시간을 보낸다.
    • 많고 짧은 cpu burst, 큰 I/O burst

CPU burst는 말그대로 cpu명령을 실행하는 것을 말하고,
I/O burst는 I/O를 요청한 다음 기다리는 시간을 말한다.

  • CPU-bound 프로세스
    • 계산을 하는데 많은 시간을 보낸다.
    • 적고 긴 cpu burst

Context Switch 문맥 교환

  • CPU가 다른 프로세스로 바꿀 때, 시스템은....
    • 지금까지의 프로세스 상태를 저장하고,
    • 새로운 프로세스의 저장된 상태를 로드한다.
  • 문맥 교환 시간은 순수하게 오버헤드이다.
    • 문맥 교환을 하는 동안 유용한 작업을 할 수 없기 때문
  • 문맥 교환 시간은 하드웨어에 영향을 받는다.


Process Creation 프로세스 생성

부모 프로세스가 자식 프로세스를 만들고,
자식 프로세스가 다른 프로세스를 만들고,
결국 프로세스 트리를 형성한다.

  • 자식 프로세스는 자원을 필요로 한다.
    • 운영체제가 주거나 부모와 공유한다.
  • 자원 공유
    1. 부모와 자식은 모든 자원을 공유한다.
    2. 자식은 부모의 자원의 부분을 공유한다.
    3. 부모와 자식은 자원을 공유하지 않는다.
  • 실행
    • 부모와 자식은 동시에 실행한다.
    • 부모는 자식이 종료될 때까지 기다린다.
  • 주소 공간
    • 자식은 부모를 복제하거나
    • 자식에 새로운 프로그램아 로드된다.
  • 요약
    - 운영체제 커널에 PCB를 생성
    • 메모리 공간을 할당
    • 바이너리 프로그램 로드
    • 프로그램을 초기화
  • 유닉스의 경우
    • fork라는 시스템 콜이 새로운 프로세스를 만든다.

      • 부모의 PCB를 복제, 메모리 공간 할당
    • execve라는 시스템 콜이 fork후에 사용된다.

      • 바이너리 프로그램을 디스크로부터 로드, 초기화

Process Termination 프로세스 종료

  • 프로세스가 마지막 줄을 실행하고 운영체제에게 종료를 요구한다.
    • 자식 프로세스는 상태 값을 부모에게 리턴한다.(wait)
    • 자식 프로세스의 자원은 운영체제에 의해 할당이 해제된다.
  • 부모가 자식의 프로세스의 실행을 종료할 수도 있다.(abort-비정상 종료)
    • 만약 자식이 할당된 자원을 초과한다면
    • 만약 자식에게 할당된 일이 더 이상 필요하지 않다면
  • 몇몇의 운영체제는 부모 프로세스가 종료되었을 때 자식 프로세스가 존재하는 것을 허용하지 않는다. 만약 프로세스가 종료되면, 그것의 자식 프로세스도 종료되어야한다.
  • 부모 프로세스는 wait() 시스템 콜을 사용해서 자식 프로세스가 끝나기를 기다릴 수 있다.
  • 그 콜은 상태 정보와 종료된 프로세스의 pid를 반환한다.
  • 만약 자식 프로세스가 종료되었는데 아직 부모 프로세스가 wait 시스템 콜을 호출하지 않았다면 자식은 좀비 프로세스(zombie)
  • 만약 부모 프로세스가 wait을 호출하지 않고 종료했다면, 자식은 고아 프로세스(orphan)

Cooperating Processes

  • Independent process 독립적인 프로세스
    • 다른 프로세스의 실행이 영향을 주지도 받지도 않는다.
  • Cooperating process
    • 다른 프로세스의 실행에 의해 영향을 주거나 받는다.
  • 프로세스간 협력의 장점
    • 정보 공유
    • 계산 속도 증가
    • 모듈성

Producer-Consumer Problem 생산자-소비자 문제

  • 생산자 프로세스는 소비자 프로세스가 소비하는 정보를 생산한다.
    • 데이터를 생산하는 쪽이 생산자, 소비하는 쪽이 소비자
    • 컴파일러는 어셈블러에 의해 소비되는 어셈블리 코드를 생산한다.
    • 어셈블러는 로더에 의해 소비되는 객체 모듈을 생산한다.
  • 무한 버퍼(unbounded-buffer) - 버퍼의 사이즈가 무제한이다.
  • 유한 버퍼(bounded-buffer) - 버퍼의 사이즈가 제한적이다.

생산자 소비자 문제란?
생산자가 데이터를 생성하여 버퍼에 저장하고, 소비자가 버퍼에서 데이터를 가져와 소비하는 과정에서 발생할 수 있는 문제를 뜻한다. 대표적으로 공유 자원에 대한 임계구역 문제와 busy waiting 문제가 있다.

Direct Communication

  • 프로세스는 각자를 명확하게 이름을 붙인다
    • send(P, message) - 프로세스 p에게 메시지 보내기
    • receive(Q, message) - 프로세스 q로부터 메시지 받기
  • 프로세스의 식별자가 변경되면?
    • 예전 식별자에 대한 참조는 찾아서 바꿔야한다.

Indirect Communication

  • 메시지는 메일박스로 보내지고, 메일박스로부터 받을 수 있다.
  • 메일박스
    • 프로세스에 의해 메시지가 배치될 수도, 제거될 수도 있다.
    • 각각의 메일박스는 고유한 id를 가진다.
    • 프로세스는 그들이 메일박스를 공유해야 소통할 수 있다.
  • 실행
    • 메일박스를 생성
    • 메시지를 메일박스를 통해 주고 받음
    • 메일박스 파괴
  • send(A, message) - 메일박스A로 메시지 보내기
  • receive(A, message) - 메일박스A로부터 메시지 받기

Synchronization 동기화

  • 메시지는 블로킹 또는 논블로킹으로 전달된다.
  • 블로킹(Blocking)은 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 자신의 작업을 멈추고 해당 작업을 기다렸다가 다시 자신의 작업을 시작한다. synchronous(동기)
  • 논블로킹(Non-blocking)은 다른 주체의 작업에 관련 없이 자신의 작업을 하는 것을 의미한다. asynchronous(비동기)

0개의 댓글