운영체제

프로세스

으엉어엉 2024. 4. 26. 17:14
728x90

프로세스 개념

프로세스

  • 실행중인 프로그램
  • 프로그램 실행시키면 OS는 디스크에 있던 프로그램 파일을 찾아 메모리에 적재(load)하고 프로세스 만듬

 

프로세스의 구성 요소

  • 코드(Code): 프로그램의 명령어가 저장되는 메모리 영역
  • 데이터(Data): 전역 변수 및 정적 변수와 같은 초기화된 데이터가 저장되는 메모리 영역
  • 스택 (Stack): 함수가 호출될 때마다 스택에 새로운 프레임이 생성되고, 함수의 인수 및 지역 변수가 이곳에 저장
  • 힙(Heap): 동적으로 할당된 메모리가 저장되는 메모리 영역
  • CPU Register
    • PC 
    • CS(Code Segment),DS(Data Segment),SS(Stack segment) Register:
      • 각각 코드, 데이터 및 스택 세그먼트의 위치를 가리키는 레지스터. 프로세스가 메모리에서 코드, 데이터 및 스택을 읽고 쓸 수 있도록 한다.

 

 

ex)

char *CCC = malloc(1)

*CCC: 메모 주소

malloc(1): 메모리 


프로세스 제어 블록 (Process Control Block : PCB)

  • 프로그램을 행하여 프로세스가 만들어짐, 운영체제가 프로세스를 관리하기 위해 만드는 데이터 구조
    • 프로세스가 생성될 때마다 PCB생성
    • 프로세서가 종료되면 PCB 제거

프로세스 제어 블록 (PCB)내용

  • 프로세스 번호(PID)
  • 프로세스 상태(state)
  • CPU 레지스터
  • CPU 스케쥴 정보: 우선수위, 스케쥴 queue의 point등
  • 기억장치 관리 정보: 기준 레지스터, 제한레지스터 등
  • 계정 정보: CPU가 사용된 양, 계정 번호, 프로세스 번호
  • I/O 상태 정보: 입출력 요구들, 입출력 장치, 개방된 파일의 목록

 


다중 프로그래밍(Multiprogramming)

  • 여러 작업들을 메모리에 유지시켜서 CPU가 계속 작업을 실행할 수 있게 하는 기법
  • 장점: CPU사용률을 높일 수 있다. ( CPU를 계속 사용해야 높아진다)
    • 작업이 I/O 때문에 대기하게 될 때 운영체제가 CPU를 유휴상태로 두지 않고 다른작업을 실행함
    • I/O은 긴 시간 소요, 그동안 CPU 사용가능
  • 단일 작업 기법에서는 CPU와 I/O장치를 동시에 사용 할 수 없다.
    • I/O을 하는 동안 기다리고 CPU가 유휴 상태가 됨
    • 출력을 기다리지 않고 다음 작업 시

 

시분할(Timesharing) 또는 멀티태스킹(multitasking)

  • 각 프로세스에게 CPU를 시간적으로 분할해 조금씩 사용할 수 있게 한 시스템
  • 다중 사용자 시스템의 경우 한사용자-> 다음사용자로 빠르게 교환. => 자신만이 소유한것처럼 느껴짐
  • 시간값= 타이머주기 = 100m/sec
  • 타이머가 멈추지 않는 이유는 Time Sharing 하려고

 

 


 

 

프로세스 상태(Process State)

 

프로세스는 상태가 변한다.

  • 생성(new): 프로세스가 생성 되는 중-> 메모리에 만들어지고 있다.
  • 실행(running): 프로세스의 명령어들이 실행되고 있다.
  • 대기(waiting): 프로세스가 어떤 사건(I/O 종료와 같은)이 일어나기를 기다림
  • 준비(ready): 프로세스가 CPU를 할당받기를 기다린다.
  • 종료(terminated):프로세스의 실행이 종료된다.

어느 순간 한 CPU(PC register) 에 오직 하나의 프로세스(CPU가 1개이기 때문)만이 실행된다

  • 실행 상태의 프로세스는 오직 한개
  • 나머지 프로세스들은 대기, 준비 상태에 있음

 

 

 

 

  • Ready-> Running(dispatch)
    (스케쥴러에 의해 선택된) 준비큐 맨 앞에 있는 프로세스에게 프로세서를 할당하는 것을 디스패치라고 한다.
  • Running-> Ready(timeout)
    운영체제는 한 프로세스가 독점하는 것을 막기 위해 timer를 두어 특정 프로세스가 할당된 시간 만큼만 프로세서를 점유하게 한다. 해당 시간이 끝나면 timer는 인터럽트를 발생시켜 운영체제에게 프로세서 제어권을 부여한다. 그러면 시간을 전부 소진한 프로세스는 준비상태로 가고 준비큐 맨 앞의 프로세스가 실행상태가 된다.
  • Running -> Waiting(block)
    프로세스를 실행하다가 입출력 명령이나 시간이 많이 필요한 이벤트가 발생하면 프로세서를 스스로 반납하고 대기 상태가 된다.
  • Waiting -> Ready(wakeup)
    대기 상태에서 입출력 작업이 끝나면 대기에서 준비 상태가 된다

 

 

interrupt, I/O or event COmpletion: 선점

exit, I/O or event wait : 비선점

 

 

 


 

 

 

 

 

 

 

 

 

문맥 교환(상태)

CPU가 다른 프로세스로 넘어갈 때, 지금까지의 프로세스의 상태(CPU 레지스터 의 내용)를 PCB에 저장하고, 새 프로세스의 PCB에 저장되어 있는 상태(CPU 레 지스터의 내용)을 다시 CPU 레지스터에 적재해야 한다.

  • 문맥 = 상태
  • 문맥교환 = 프로세스간 상태를 스위치

문맥 교환은 시스템의 오버헤드임 : 문맥교환 동안에는 실제 필요한 작업을 하지 못한다. 실제 필요한 작업: 프로세스 실행

 

문맥 교환 시간을 줄이는 것이 좋다. 걸리는 시간은 하드웨어 자원에 따라 다르다

 

멀티테스킹

  • 다수의 프로세스가 하나의 CPU자원을 나누어 사용하는 것
  • 실행 가능한 프로세스들이 운영체제의 스케줄러에 의해 조금씩 번갈아 수행됨
  • CPU를 할당받을 때 문맥 교환이 일어남
  • 매우 빠른 속도로 처리되기 때문에 동시에 처리되는 것처럼 느낌

인터럽트 처리

  • 인터럽트란 컴퓨터 시스템에서 예외 상황이 발생했을 때 CPU에게 알려 처리할 수 있도록 하는 것
  • 인터럽트가 발생할 때 문맥 교환이 일어남
  • I/O request : 입출력 요청
  • time slice expried : CPU 사용시간 만료
  • fork a child : 자식 프로세스 생성
  • wait for an interrupt : 인터럽트 처리 대기

사용자 및 커널 모드 전환

  • 운영 체제에서 사용자 모드와 커널 모드 사이의 전환이 필요할 때 필수는 아니지만 운영체제에 따라 문맥 교환이 발생

 

 

 

 

프로세스 스케쥴이란 여러 프로세스들 중에서 어떤 것을 실행할 것인지 결정

스케쥴 Queue

운영체제는 스케쥴링을 위해 PCB를 Queue로 관리한다

 

준비 Queue

  • 준비 상태의 프로세스들을 관리
  • 준비 상태의 PCB를 linked list로 관리
    • 준비 queue의 헤더는 첫번째 PCB와 마지막PCB가리키는 포인터를 가지고 있다.
    • PCB는 다음 PCB를 가리키는 포인터를 가지고 있다.

입출력 장치 Queue

  • 각 I/O장치는 자신의 장치 Queue를 가진다
  • I/O장치에서는 대기하는 프로세스들을 관리
  • 프로세스는 CPU를 할당받아 실행하다가 입출력 요청을 하게되면 I/O 요청의 완료를 기다리게 된다. ㅇ다른 프로세스도 기다리고 있을 수 있으므로 연결하여 Queue로 관리한다.

 

 

새로 생성된 프로세스는 준비 Queue에 위치 된다.

프로세스에 CPU가 할당되면 실행

            ① 입출력 요청(시스템호출)을 발생하여 입출력 장치 큐에 위치한다. 입출력이 끝나 면 준비 큐에 다시 위치한다.

            ② 시분할 시스템의 경우, 타이머 인터럽트가 발생하면 프로세스에 할당된 시간이 종료되어 실행중인 프로세스가                    준비 큐에 다시 위치한다.

            ③ 자식 프로세스를 생성하며, 이 프로세스가 종료하기를 기다리면서 대기 큐에 위치한다. 자식 프로세스가 종료하                   면 준비 큐에 다시 위치한다.

            ④ 인터럽트가 발생하면, 실행중인 프로세스는 강제로 CPU가 제거되고 준비 큐에 다시 위치한다.

 

아래그림과 같다.

 

 

장기 스케쥴러(예전 방식) -> 어떤 프로세스를 준비 Queue에 넣을 것인가?

  • 2차 저장장치(디스크)에 저장되어 있는 작업들 중에서 선택하여 실행하기 위한 기억장치로 적재
  • 선택된 작업은 준비 Queue로 들어감
  • 하드 디스크 -(load)> memory
  • 다중 프로그래밍수를 제어한다. 즉 주 기억 장치에 저장되는 프로그램 수를 제어
  • 프로세스의 성질
    • I/O중심 프로세스 - CPU 연산보다 입출력에 많은 시간 소요 
    • CPU 중심 프로세스 - I/O보다는 CPU 연산에 시간 소요
    • 모두가 I/O중심 프로세스 방식이면 준비 queue는 항상 비게되고, CPU 중심 프로세스는 입출력 대기 큐가 비게됨
    • 따라서 두개가 적절한 비율로 섞이는게 좋다
  • 디스크에서 어떤 프로세스를 메모리로 로드할지 결정
  • 가장 느리게 수행됨
  • 디스크와 메모리의 자원을 효율적으로 관리 , 시스템 성능 향상

 

단기 스케쥴러(요즘 방식)-> 어떤 프로세스에 CPU를 할당할 것인가?

  • 실행 준비가 되어있는 프로세스들 중에서 선택하여 CPU 할당
  • 수십 msec 마다 실행되어 새로운 프로세스 선택
  • 매우 짧은 시간 간격 , CPU할당할  때마다 실행
  • 다음에 CPU를 할당할 프로세스 결정

중기 스케쥴러-> 메모리 적재된 프로세스 수 관리 

  • 어떤 프로세스가 스왑되어 나가고 다시 스왑되어 들어올 것인지 결정
  • 스와핑 : 부분적으로 실행된 프로세스를 디스크에 저장했다가 다시 주 기억장치로 불러와 실행을 재개
  • 메모리에 로드된 프로세스를 관리하고 필요에 따라 메모리에서 프로세스를 제거하거나 유예한다.
  • 메모리 사용량을 최적화한다.

 


프로세스 생성

 

 

 

자원 공유

  • 부모와 자식은 모든자원(기억장치, 개방된 파일, I/O 버퍼 등)을 공유
  • 자식은 부모 자원의 일부분 공유
  • 부모와 자식은 자원을 공유하지 않는다

실행

  • 부모와 자식은 함께 실행한다.
  • 부모는 자식이 끝날 때까지 기다린다.

 

이러한 사항은 시스템 호출 시에 선택할 수 있다.

 

 

 


 

프로세스 종료

프로세스는 마지막 명령어의 실행을 끝내고 종료하게 된다.

이때 프로세스는 exit 시스템 호출을 통해 운영체제에게 프로세스 삭제를 요청

  • 소스코드에서 exit 시스템을 호출
  • 호출되지 않으면 컴파일러가 기계어 실행파일을 만들때 마지막에 exit 시스템 호출 추가해줌

운영체제는 프로세스에 할당된 자원을 회수하고 PCB를 삭제하여 프로세스를 제거한다.

  • 기다리고 있는 부모 프로세스가 있다면 (wait 시스템 호출) , 운영체제는 그 결과(자식 프로세스가 종료된 것)를 부모 프로세스에게 알려 대기(wait)상태에서 준비(ready) 상태로 만든다.

부모 프로세스는 자식 프로세스를 종료시킬 수 있다. (abort 시스템 호출)

사용자가 시스템을 임의로 종료시킬 수 있다(kill 시스템 호출)

 

 


 

 

프로세스간 통신 

상호 독립적인 프로세스는 다른 프로세스에게 영향을 주거나 받지 않는다

상호 협조적인 프로세스는 필요한 병행 수행은 프로세스 간에 통신하고 그들의 행동을 동기화할 수 있는 방법이 있어야한다.

IPC (상호호출)

  • 프로세스들간의 통신을 할수있게 하고 프로세스들간의 행위에 동기화를 제공해줌

 

IPC 메커니즘

  • 공유 메모리
  • 메시지 전달

 

공유메모리

생산자-소비자 문제

생산자 프로세스는 정보를 생산하고 소비자 프로세스는 정보를 소비한다

버퍼저장소가 공유메모리.

 

 

 

메시지 전달

  • 프로세스들이 메시지를 송수신하여 서로 통신함
  • 두가지 방식: 직접통신, 간접통신  

두가지 기본 연산 : send, receive

 

프로세스 P와 Q가 통신 하려면 

1. 먼저 이들 사이에 통신 링크(cummunication link)가 설정 되어야함

2. 통신 링크를 통해 send/receive를 사용하여 메시지를 주고받는다.

 

 


 

직접 통신

 

프로세스는 상대 프로세스의 ID(번호)를 직접 명시한다

send: 프로세스 p에게 메시지 송신

receive: 프로세스 Q로부터 메시지를 buf로 수신

직접보내지 않고 프로세스를 통해 보낸다.

 

 

통신 링크의 속성

  • 링크는 자동으로 만들어진다
  • 한 링크에 한 쌍의 통신 프로세스만이 관련된다.
  • 각 프로세스 쌍 사이에 한 개의 링크가 존재한다.
  • 링크는 단방향이거나 양방향도 가능하다

 


간접통신

프로세스는 메일박스(mailbox 또는 port)로 메시지를 송신하고, 받는 프로세스는 메일박스로부터 수신한다.

  • 통신하려는 프로세스들은 먼저 메일박스를 생성하고 공유
  • 각 메일 박스는 고유한 id를 가진다.
  • 프로세스는 공유 메일 박스를 가질 때만 통신할 수 있다.

통신 링크의 속성

  • 링크는 메일박스를 공유하는 프로세스들간에 만들어진다.
  • 링크는 많은 프로세스들과 관련될 수 있다.
  • 프로세스의 각 쌍은 여러 개의 연결 링크를 가질 수 있다.
  • 링크는 단방향 또는 양방향이 가능하다.

 

 

 

  1. 프로세스의 상태 중에서, CPU를 할당받기를 기다리는 상태는 준비(Ready) 상태 .이 상태에 있는 프로세스는 CPU를 할당받기 위해 대기하고 있으며, 스케줄러에 의해 CPU를 할당받을 때까지 대기한다.
  2. 프로세스의 상태가 실행 상태에서 준비 상태로 전이하게 하는 사건은 타이머 인터럽트(timer interrupt)이다
  3. PCB에서 레지스터 저장 영역의 용도는 프로세스의 상태를 저장하는 것이다. 레지스터 저장 영역에는 프로세스가 실행 중일 때 CPU 레지스터의 내용이 저장되어 있어서, 문맥 교환 시에 이전 프로세스의 상태를 저장하고 다음 프로세스의 상태를 복원할 수 있다.

    • 하드웨어 지원을 통해 문맥 교환 시간이 최소화된다. 프로세스의 상태를 저장하고 복원하는 과정이 하드웨어에 의해 자동으로 수행되므로, 문맥 교환의 오버헤드가 줄어든다.
    • 하드웨어 지원을 통해 문맥 교환의 정확성과 안정성이 보장된다. 하드웨어가 문맥 교환을 처리하므로 프로세스의 상태가 올바르게 저장되고 복원되어 프로세스 간의 충돌이나 오류가 방지된다.
  4. 프로세스간 통신을 위한 메시지 전달 방법에서 직접통신과 간접통신의 특징은 다음과 같다:
    • 직접 통신:
      • 송신자 프로세스는 명시적으로 수신자 프로세스를 지정하여 메시지를 전송한다.
      • 송신자와 수신자 간에 직접적인 연결이 필요하며, 통신의 속도가 빠르다.
      • 일반적으로 송신자와 수신자 간의 관계가 1:1인 경우에 사용된다.
    • 간접 통신:
      • 송신자 프로세스는 수신자 프로세스를 명시적으로 지정하지 않고, 시스템이나 운영체제를 통해 메시지를 전송한다.
      • 시스템이나 운영체제가 메시지를 중계하므로, 프로세스 간의 직접적인 연결이 필요하지 않는다.
      • 일반적으로 프로세스 간의 관계가 복잡하거나 동적으로 변경되는 경우에 사용된다.
728x90

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

CPU 스케쥴  (1) 2024.04.26
쓰레드  (1) 2024.04.26
운영체제 구조  (0) 2024.04.26
하드웨어 개요  (0) 2024.04.26
운영체제 개요  (0) 2024.04.26