Super Kawaii Cute Cat Kaoani
본문 바로가기
💾 lecture/운영체제

[OS] Chapter 3: Processes

by wonee1 2023. 10. 13.
728x90

 

Process Concept

 

프로그램은 디스크와 같은 보조 기억 장치에 저장되어 있다.

프로그램은 수동적, 프로세스는 능동적

 

프로세스 

  • 실행 중인 프로그램 
  • Batch system-jobs
  • Time-shared system- task (멀티 테스킹 시스템)

 

프로그램은 실행 가능한 파일로 저장되어있을 때는 수동적인 상태이며 

메인 메모리에 로드되고 cpu에서 실행될 때 프로세스가 된다. 

 

프로세스 구성 요소

 

  • 텍스트 섹션 : 프로그램 코드 자체를 포함. 실행 가능한 프로그램들의 명령어들을 포함하고 있으며 CPU가 실행하는 명령어들이 저장되어 있다. 
  • 스텍/데이터/힙 : 프로세스의 메모리 공간을 관리 
  • 프로그램 카운터 (PC) : 현재 실행 중인 명령어의 주소를 나타낸다. CPU는 이 주소에서 다음 실행할 명령어를 찾아 실행한다.
  • CPU 레지스터 : 프로세스가 CPU에서 실행되는 동안 레지스터에는 중요한 데이터와 상태 정보가 저장된다. 이 정보는 프로세스의 실행을 관리하고 제어하는데 사용된다.
  • PCB : 프로세스 컨트롤 블록은 프로세스에 대한 정보를 포함하는 데이터 구조 (구조체로 선언된다) 이 정보에는 프로세스의 상태, 식별자, 우선 순위. 메모리 할당 정보, 입출력 상태 등이 포함된다. PCB는 운영체제가 프로세스를 관리하고 스케줄링하는데 사용된다

 

 

 

 

 

- 변수는 데이터가 저장되는 공간

변수 선언은 메모리 공간을 할당하는 것 

 

- 텍스트는 기계어 명렁어들을 쭉 모아놓은 부분 

텍스트를 제외한 나머지 부분은 변수들을 위한 공간 

 

- 메모리 

스택은 함수 호출 및 반환 정보, 지역 변수 및 임시 데이터를 저장한다. (후입선출)

데이터는 초기화 된 전역 변수와 정적 변수를 저장한다. 이때 데이터는 프로그램 실행중에 변경되지 않는다.

힙은 동적으로 할당된 메모리를 저장한다. 메모리의 동적 할당 및 해제를 처리하는데 사용된다. 

 

-프로세스가 가질 수 있는 메모리 공간은 제한 되어있음 -> 함수 호출을 무한히 할 수 없다.

프로세스는 cpu라는 자원과 메모리를 쓰고 있다. 

 

- 명령어가 실행될 때마다 CPU 레지스터의 값은 계속 바뀐다. 

 

-프로세스 컨트롤 블록 PCB는 프로세스가 실행되는 동안에 프로세스를 관리하기 위해서 프로세스에 대한 정보들을 기록해둔 것 

 

Process State

프로세스 실행 상태

  • New (새로운 상태): 프로세스가 생성되는 초기 상태. 프로세스가 생성되고 메모리에 할당된 후에는 준비 상태로 이동메모리 할당 및 PCB 할당.
  • Ready(준비 상태): 프로세스가 CPU를 할당받을 준비가 되었지만 아직 실행되지 않은 상태
  • Running(실행 중인 상태): 프로세스가 현재 CPU에서 명령어를 실행하고 있는 상태. CPU 시간을 할당받아 작업을 수행 (CPU당 돌아가는 프로세스는 하나)
  • Waiting(대기 상태) : 프로세스가 어떤 이벤트나 조건을 기다리고 있는 상태 (입출력 작업이 완료되기를 기다리거나 특정 이벤트가 발생하기를 기다리는 경우 
  • Terminated(종료된 상태): 프로세스가 실행을 마치고 종료된 상태. 프로세스가 작업을 완료하거나 종료 명령을 받으면 종료 상태로 이동

운영 체제는 프로세스 스케쥴링을 통해 각 프로세스에 CPU 시간을 할당하고 이러한 상태 전환을 관리한다. 

프로세스 상태 관리는 멀티 테스킹 환경에서 여러 프로세스를 동시에 실행하는데 중요한 역할을 한다. 

 

 

 

프로그램 실행-> 메모리로 로드 -> 프로세스가 만들어짐 -> 메모리 할당, PCB 할당 -> 프로그램 실행 끝남 -> 할당된 메모리, PCB 반납 

 

admitted : 프로스에 필요한 자원을 할당하고 데이터 구조를 설정하는 단계

 

scheduler dispatch: 한 번 프로세스가 승인되면 운영체제의 스케줄러는 어떤 시점에 어떤 프로세스가 CPU가 실행할 수 있는지 결정한다. 스케쥴러 디스패치는 CPU가 선택된 프로세스에 할당되어 실행되는 이벤트르 의미한다. (스케줄링은 운영체제가 결정한다) 여러 개의 프로세스 중에서 하나를 선택한다. 

 

I/O or event completion: 프로세스 실행 중에 I/O작업을 시작하거나 데이터가 수신되길 기다리는 등 특정 이벤트의 완료를 기다릴 때 , 해당 작업 또는 이벤트가 완료된 것을 의미한다. 이러한 작업이나 이벤트가 완료되면 프로세스는 실행을 계속할 수 있다. 

 

I/O or event wait : I/O 작업이 완료되기를 기다리거나 이벤트가 발생하기를 기다리는 동안, 프로세스는 대기 상태로 들어간다. 이 상태에서는 CPU시간을 소비하지 않으며 요청된 I/O 이벤트가 완료될 때까지 비활성 상태다. 

 

*I/O를 하는동안 CPU는 안필요하다->CPU가 할 일이 없어 운영체제가 프로세스에게서 CPU를 뺏는다->다시 스케쥴링이 일어난다. 

 

interrupt  : 인터럽트는 하드웨어나 소프트웨어에서 발생하는 즉각적인 처리가 필요한 사건을 나타내는 신호 .

프로세스 관력 문맥에서 인터럽트가 CPU를 현재 실행중인 프로세스에서 다른 프로세스로 전환하거나 하드웨어 이벤트를 처리하거나 예외적인 상황에 대응하기 위해 사용될 수 있다. 

 

exit : 프로세스가 실행을 완료하거나 사용자나 운영 체제에 의해 명시적으로 종료될 때 종료 상태로 들어간다.

프로세스와 관련된 자원이 해제되고 시스템에서 제거 된다.

 

 

Process Scheduling Queues

Job queue (작업 대기열) : 시스템 내 모든 프로세스의 집합, (New 상태에도 줄을 세움 -> Ready의 줄을 유지하기 위해서) 

 

Ready queue(준비 대기열) : 메인 메모리에 상주하면서 실행을 기다리고 있는 모든 프로세스의 집합 , Ready 상태의 줄

 

Device queues( 장치 대기열) : I/O장치를 기다리는 프로세스들의 집합 

 

프로세스가 다양한 대기열 간 이동: 프로세스들은 대기열 간의 이동을 할 수 있다

 

 

 

Ready Queue And Device Queues

7번 프로세스가 선택되면 PCB 7을 대기줄에서 제외시킨다.  (선택된 7번 프로세스는 Running 상태로 간다,scheduler dispatch)

14번 I/O 장치가 선택되면 PCB 14FMF 디스크 대기줄에서 제외 시킨다. (선택된 14번 I/O장치는 Ready queue로 간다, i/o or event wait )

 

Schedulers

Short-term scheduler (or CPU scheduler) (단기 스케줄러 또는 CPU 스케줄러) 

  • 다음으로 실행될 프로세스를 선택하고 CPU를 할당하는 역할을 담당한다  (할당된 시간이 지날 때마다 호출된다) 
  • Ready queue 에서 누구한테 CPU를 할당할 지 결정한다
  • 프로세스에게 cpu를 주는 시간이 굉장히 짧기 때문에 사용한다(자주 호출된다) 

 

Long-term scheduler (or job scheduler) (장기 스케줄러 또는 작업 스케줄러)

  • 어떤 프로세스들이 준비 대기열에 들어갈지 선택하는 역할을 한다. 
  • Job queue 에서 Ready queue로 보낼 것을 결정한다. ( 장기 스케줄러가 Job queue에서 프로세스를 선택하여 Ready queue로 이동시킨다)
  • 멀티 프로그래밍의 디그리를 결정한다고 제어한다.( 멀티 프로그래밍의 디그리가 크다는 말은 Reday queue의 줄이 길다는 말-> 개별 프로세스들이 느끼는 속도가 느려짐) 즉 Ready queue의 줄의 길이를 조절한다. 

* Multiple programming은 동시에 메모리에 여러 개의 프로세스를 유지하는 것 

 

 

프로세스는 다음과 같이 설명할 수 있다.

  • I/O-bound process (I/O-바운드 프로세스): I/O 작업에 대부분의 시간을 할애하며, 계산 작업보다는 I/O 작업에 중점을 둔다. CPU를 짧게 사용한 뒤, I/O를 수행하는 프로세스
  • CPU-bound process (CPU-바운드 프로세스): 계산 작업에 대부분의 시간을 할애하며, I/O 작업보다는 계산 작업에 중점을 둔다. CPU를 길게 사용한 뒤 계산 작업을 하는 프로세스.
Addition of Medium Term Scheduling

Medium-term scheduler (중간 단계 스케쥴러)

 

  • multiple programming  (다중 프로그래밍 정도) 를 감소해야할 때 추가 될 수 있다
  • 메모리에서 프로세스를 제거한 뒤 프로세스를 디스크에 저장, 프로세스를 다시 디스크에서 메모리로 불러와서 실행을 계속한다. (swap) 
  • 한정된 메모리를 가지고 메모리에 공간을 차지하면서 프로세스가 돌아가고 있다, 따라서 더 많은 프로세스를 돌리기 위해서 이 방식을 사용한다.
  • swap in 메모리로 넣는 것 swap out 디스크로 복사 해둔다.
  • 이때 누구를 디스크로 뺄 것인지 결정하거나 디스크에 있는 프로세스중에 다시 메모리로 불러올 것인지 결정하는 것이  미디움 텀 스케쥴러의 역할 

 

 

PCB and Context Switch

 

Process Control Block (PCB)

프로세스에 대한 모든 정보가 기록되어있다. 

  • 프로세스 번호 (프로세스 ID, PID)
  • CPU 상태 (프로그램 카운터, CPU 레지스터)
  • 프로세스 상태
  • CPU 스케줄링 정보
  • 메모리 관리 정보
  • 계정 정보
  • I/O 상태 정보

운영체제마다 pcb를 기록하는 방법이 다르다 (프로세스를 관리하는 방법이 다르다)

 

 

 

Context Switch

CPU가 다른 프로세스로 전환될 때, 시스템은 다음을 수행해야 한다.

 

  • A 이전 프로세스(CPU를 빼앗긴 프로세스)의 상태를 저장.
  •  새로운 프로세스(CPU를 받고자 하는 프로세스)가 실행 될 때 이 프로세스의 이전에 실행됐을 때의 저장된 상태를 불러온다.


컨텍스트 스위치 시간은 오버헤드(시간 낭비)

  • 컨텍스트 스위칭하는 동안 시스템은 유용한 작업(CPU가 프로세스를 위해서 사용되는 시간)을 수행하지 않는다.

*오버헤드는 운영체제가 시스템을 관리하기 위해서 관리 목적상 어쩔 수 없이 쓰는 시간이다.

 

CPU Switch From Process to Process

 

 

 

1. 프로세서 P0가 실행되고 일정 시간이 경과한 후 인터럽트가 발생한다
2. 운영체제가 실행되고, P0 프로세스의 현재 상태를 저장하여 PCB(프로세스 제어 블록)에 저장한다.
3. 그런 다음 운영체제는 P1 프로세스를 실행하기로 결정한다(스케쥴링).
4. P1 프로세스의 저장된 상태 (PCB에 저장되어 있음)를 메모리에서 로드한다.
5. P1 프로세스가 실행된다.

 

 

 

 

 

 

Process Creation and Termination

Process Creation

 

부모 프로세스가 자식 프로세스를 생성하고, 자식 프로세스가 또 다른 프로세스를 생성하여 프로세스 트리를 생성한다. 

일반적으로 각 프로세스는 프로세스 식별자 (pid)에 의해 식별된다

 

실행

  • 부모 및 자식 프로세스는 동시에(concurrently) 실행된다 
  • 부모 프로세스는 자식이 종료될 때까지 대기한다

* parallel : 동시에 2개가 돌아가는 것, 한 cpu가 2개 이상의 프로세스를 패럴렐하게 돌릴 수 없음. 두 개의 프로세스를 패럴렐하게 돌릴려면 cpu가 2개 있어야한다. 

*concurrent: 물리적으로 동시에 진행되는 것은 아니고 동시에 진행되고 있는 상태를 말한다. 따라서 부모 프로세스와 자식 프로세스가 컨커런트하게 실행된다는 말은 cpu가 1개인 경우. 

 

 

A Tree of Processes in Linux

 

자원(예: CPU시간, 메모리 , 파일 , I/O 장치) 공유

  •  부모 및 자식 프로세스가 모든 자원을 공유한다
  •  자식 프로세스가 부모 프로세스의 일부 자원을 공유한다
  • 부모 및 자식 프로세스가 어떠한 자원도 공유하지 않으며 독립적으로 실행된다. 

 

주소 공간

  •  자식 프로세스는 부모 프로세스의 복제본이다
  • 자식 프로세스는 프로그램이 로드된 상태

 

UNIX 예시 

  • fork() 시스템 호출은 새로운 프로세스를 생성한다
  • fork() 이후 exec() 시스템 콜을 사용하여 프로세스의 메모리 공간을 새로운 프로그램으로 대체한다.

Process Termination

 

프로세스가 마지막 명령문을 실행하는 경우 ->일반적인 종료 발생

  • 부모 프로세스에 상태 값 반환 
  • 운영 체제에 의해 프로세스의 자원이 할당 해제됨 (자원 회수 , 운영체제가 한다)

 

부모 프로세스가 자식 프로세스의 실행을 종료할 때 -> 비정상 종료를 나타낼 수 있다. 

  • 자식 프로세스가 할당된 자원을 초과한 경우
  • 자식 프로세스에 할당된 작업이 더 이상 필요하지 않은 경우

 

부모 프로세스 종료 

  • 운영체제에 의해서 자식 프로세스 종료 (cascading termination)
  • 자식 프로세스가 init 프로세스에 인계된다 

 

Cooperating Processes

 

독립 프로세스는 다른 프로세스의 실행에 영향을 주거나 다른 프로세스의 실행에 영향을 받지 않는다.
반면, 협력 프로세스는 다른 프로세스의 실행에 영향을 주거나 다른 프로세스의 실행에 영향을 받을 수 있다.

 

협력 프로세스를 사용하는 이유

  • 속도 향상 (smp에서 실현됨)
  • 모듈성과 편리성 (편집 인쇄 컴파일과 같은 작업을 병렬로 처리할 수 있다)
  • 정보 공유의 필요성 

프로세스 간 통신 (Interprocess Communication IPC) 

협력 프로세스 간에 데이터,정보 또는 메세지를 주고 받을 수 있는 메커니즘 

IPC 메커니즘은 다양한 작업에 사용되며 협력 프로세스가 데이터를 교환하고 상호작용하는 데 필수적

 

IPC 두가지 모델

  • 공유 메모리 모델 : 여러 프로세스가 동일한 메모리 영역을 공유한다. 프로세스는 해당 메모리에 데이터를 읽고 쓸 수 있으며 이를 통해 데이터 공유와 빠른 통신이 가능하다. 그러나 동기화와 충돌문제를 다루기 위한 메커니즘을 필요로 한다,
  • 메세지 전달 모델: 프로세스가 명시적인 메세지를 주고 받아 통신한다. 각 프로세스는 메세지를 전송하고 수신하며 이를 통해 데이터 및 정보를 교환 한다. 메세지 전달 모델은 비교적 안전하고 격리된 통신이 가능하지만 별도의 메세지 전달 프로토콜과 메세지 큐 등의 메커니즘을 필요로한다. 

 

 

 

Shared Memory Model (SMM)

 

일반적으로 운영체제는 한 프로세스가 다른 프로세스 메모리에 엑세스 하는 것을 방지한다. 그러나 공유 메모리를 통한 통신은 가능하다

  • 한 프로세스가 공유 메모리 영역을 설정한다
  • 다른 프로세스가 공유 메모리를 자신의 주소 공간에 연결한다
  • 공유 영역을 통해 데이터를 교환한다

공유 영역에 대한 접근을 제어한다

  • 동시 접근 방지: 사용하는 프로세스는 공유 메모리 영역에 동시에 여러 프로세스가 접근하는 것을 방지한다. 즉 한 시점에서 한 프로세스만이 공유 메모리에 엑세스 할 수 있도록한다
  • 동기화 : 프로세스 간에 데이터를 동기화하고 동시에 엑세스하는 경우 충돌을 방지하며 데이터 일관성을 유지한다. 이는 다중 프로세스 간의 협력적 데이터 공유를 안전하게 처리하기 위해서 필수적이다.

Message-Passing

 

프로세스들은 공유 메모리를 사용하지 않고 서로 통신할 수 있습니다. 이를 위해 IPC시설을 사용하며, 이 시설은 주로 두 가지 연산을 제공한다. 

  • 메세지 전송: 프로세스는 메세지를 다른 프로세스로 전송할 수 있다.
  • 메세지 수신: 프로세스는 다른 프로세스로부터 메세지를 수신할 수 있다.

두 프로세스 P와 Q가 통신하기를 원한다면, 다음 단계를 수행해야 한다. 

  • 직접 통신(Direct communication): 프로세스 P 와 Q는 직접 통신 링크를 설정하고 메세지를 주고 받는다. 일대일 통신 
  • 간접 통신( Indirect communication): 프로세스 P와 Q는 중간매체를 통해 통신한다.

 

Message-Passing : Direct Communication

 

프로세스는 명시적으로 서로를 식별해야한다

  • send(P, message) (메시지를 프로세스 P에 보내기): 프로세스는 메시지를 특정한 프로세스 P에 보낼 수 있다.
    receive(Q, message) (프로세스 Q로부터 메시지 받기): 프로세스는 특정한 프로세스 Q로부터 메시지를 받을 수 있다.

통신 링크(communication link)의 속성

  • 링크는 자동으로 설정됨
  • 링크는 정확히 한 쌍의 통신하는 프로세스와 연결됨
  • 각 프로세스 쌍은 정확히 하나의 링크를 가짐

Message-Passing : Indirect Communication

 

메시지는 메일박스(또는 포트)를 통해 교환된다. 각 메일박스는 고유한 식별자를 가지며, 다음과 같은 방식으로 통신이 이루어진다.

  • 각 메일박스는 고유한 ID를 가짐
  • 공유 메일박스 M를 통한 통신 : send(M, message) (메시지를 메일박스 M로 보내기) ,receive(M, message) (메일박스 M로부터 메시지 받기)

   

통신 링크(communication link)의 속성

  • 링크는 프로세스가 공유 메일박스를 가지는 경우에만 설정됨
  • 링크는 여러 프로세스와 관련될 수 있음
  • 각 프로세스 쌍은 여러 통신 링크를 공유할 수 있음

간접통신을 위한 다양한 작업

  • 새로운 메일박스 생성
  • 메일박스를 통한 메세지 전송
  • 메일박스 삭제 

메일 박스 공유

  • P1,P2 그리고 P3은 메일 박스 M을 공유한다
  • P1이 메세지를 보내는 동안 P2와 P3가 동시에 receive 작업을 실행한다면, 메세지를 받는 프로세스는 시스템이 임의로 선택한 프로세스다. 어떤 프로세스가 메세지를 받을지의 결정은 무작위적으로 이루어진다. 

 

해결책

  •  한번에 하나의 프로세스만 receive 작업을 수행할 수 있도록 허용
  • 시스템이 수신자를 임의로 선택할 수 있도록 허용
  • 송신자에게 수신자가 누구인지 알림 

 

728x90