1. 프로세스의 개념

프로세스(process) ? 메모리에 올라가서 실행 중인 프로그램

   - 프로그램? : 디스크에 실행파일 형태로 존재하는 것

 

프로세스를 이해하기 위해 알아야 하는 것

  • 프로세스의 문맥(context) : 프로세스가 현재 어떤 상태에서 수행되고 있는 지 정확히 규명하기 위한 필요한 정보
    • (예시) 시분할 시스템 환경에서 타이머 인터럽트에 의해 CPU를 짧은 시간동안 사용 후에 다시 획득하는 방식으로 작동한다. 이때 CPU를 다시 획득한 경우 이전에 정확하게 어느 부분까지 수행했는지를 알기 위해 필요한 정보
    • < 구성 > 
      • 하드웨어 문맥 : CPU의 수행상태- 프로그램  카운터 값 과 각종 레지스터에 저장하고 있는 값들
      • 프로세스의 주소공간 :  코드, 데이터, 스택으로 구성된 공간, 프로세스의 문맥을 결정짓는 중요한 요수 중 하나
      • 커널상의 문맥 :  프로세스를 관리하기 위한 자료구조를 유지

2. 프로세스의 상태

  • 3가지: 실행(running), 준비(ready), 봉쇄(blocked, wait, sleep)
    • 실행 상태 : 프로세스가 CPU를 소유하고 기계어 명령을 실행하고 있는 상태
    • 준비 상태 : CPU만 할당 받으면 당장 명령을 실행할 수 있는 상태
    • 봉쇄 상태 : CPU를 할당 받아도 당장 명령을 실행할 수 없는 상태
      • 현재 명령을 실행 중이여서 입력받은 명령을 실행 할 수 없는 상태
      • 이유: 후속 명령이 파일을 다읽어온 결과가 있어야지만 실행 이 될 수 있는 것이면 파일을 읽어오는 동안 CPU는 기다려야한다. 이러한 상황은 CPU를 비효율적으로 사용하게 되므로 봉쇄상태에 들어가서 파일을 다 읽어올때 까지 CPU를 반환하고 봉쇄상태에 돌입한다. 즉, 디스크에 입출력을 요청하고 이 작업이 완료될 때까지 봉쇄상태가 된다.

이렇게 상태를 구별하는 이유는 -> 컴퓨터 자원을 효율적으로 사용하기 위함

 

  • 3가지 외에도 프로세스의 일시적인 상태를 구별하는 명칭도 있다.
    • 시작(new, 프로세스가 생성중) : 프로세스를 시작하기 위한 모든 자료구조는 생성되었지만 메모리 승인을 못받은 상태
    • 완료(teminated, 프로세스가 종료 중): 프로세스는 종료되었지만, 해당 자료구조를 전부 정리하지 못한 상태
  • 문맥교환(context switch) :
    • 수행 중이던 프로세스의 문맥을 저장하고 새로운 프로세스 문맥을 셋팅하는 과정
    • 발생하는 경우
      • 타이머 인터럽트
      • 봉쇄상태( 입출력 요청 시스템콜)
    • 이때 준비된 프로세스 중에서 하나가 실제로 CPU의 제어권 넘겨받는 과정을 CPU 디스패치(dispatch)라고 한다.
  • 디스크에 입출력을 요청한 프로세스
    1. 디스크 입출력을 기다리는 큐에 줄서서 대기
    2. 자기 차례에 디스크 컨트롤러로 부터 데이터를 받기 완료
    3. 디스크 컨트롤러가 CPU에 인터럽트를 발생시켜 입출력 완료사실을 알림
    4. 인터럽트 처리 루틴 실행
      1. 입출력 큐에서 빠져나옴
      2. 봉쇄상태인 프로세스를 준비상태로 바꾼 후
      3. 로컬버퍼에 있는 내용을 메모리로 이동 시킴 (CPU 기다리는 큐에서 줄서서 대기)

3. 프로세스 제어 블록

프로세스 제어블록(proces control block: PCB)

- 운영체제가 시스템 내의 프로세스들을 관리하기 위해 프로세스마다 가지고 있는 정보들을 담는 커널 내의 자료구조

  • 프로세스의 상태 (process state)
    • CPU할당 여부 결정하기 위해 필요
  • 프로그램 카운터(program counter)의 값
    • 다음에 수행할 위치를 지칭
  • CPU 레지스터 (CPU register)의 값
    • CPU연산을 위해 현시점에 레지스터에 어떤 값을 저장하고 있는지 나타냄
  • CPU 스케줄링 정보(CPU scheduling information)
    • 프로세스의 스케줄링을 위해 필요한 정보
  • 메모리 관리 정보 (memory managemetn information)
    • 프로세서에 메모리를 할당을 위해 필요한 정보
  • 자원 사용 정보 (accounting infromation)
    • 사용자에게 자원 사용 요금을 계산해 청하는 등의 용도
  • 입출력 상태 정보 (I/O status information)
    • 입출력 상태 정보는 프로세스가 오픈한 파일 정보 등 프로세스의 입출력 관련 상태 정보

4. 문맥교환

문맥교환은  CPU를 점유하는 프로세스가 다른 사용자 프로세스로 변경되는 과정

  • 프로세스가 진행될 때 발생하는 인터럽트나 시스템콜로 인해 CPU의 제어권이 운영체제로 넘어가고 잠시 프로세스를 멈추고 운영체제의 커널의 코드가 실행 되는 경우 => 문맥교환 X, 프로세스의 실행모드가 사용자모드에서 커널 모드로 바뀌는 경우다.

5. 프로세스를 스케쥴링하기 위한 큐

준비 큐 (ready queue)

  • 운영체제가 준비되어 있는 프로세스들을 줄 세우기 위해 사용되는 큐
  • CPU를 기다리는 프로세스를 줄 세우는 큐
  • 제일 앞에 있는 프로세스에 제일 먼저 CPU 할당

장치 큐 (device queue)

  • 운영체제가 특정 자원을 기다리는 프로세스들을 줄세우기 위해 자원별로 사용되는 큐
    • 하드웨어 자원
      • 디스크 입출력 서비스 요청 -> 디스크 입출력 큐에서 줄서서 대기
      • 키보드 입출력 큐, 등등존재
    • 소프트웨어 자원
      • 공유 데이터에 대한 접근 권한
        • 데이터의 일관성을 위해서 다른 프로세스가 접근하는 것을 차단
        • 공유 데이터를 기다리는 큐에서 대기 -> 사용중인 프로세스가 데이터를 반납 -> 다음 차례 프로세서에게 순서대로 데이터의 접근권한을 주는 방법을 사용

작업 큐(job queue)

  • 시스템 내의 모든 프로세스를 관리하기 위한 큐
  • 모든 프로세스가 작업 큐에 속한다.
  • 작업 큐에 있는 프로세스가 반드시 메모리를 가지고 있지는 않음

이와 같이 프로세서의 상태 관리는 커널의 주소 영역 중 데이터 영역에 다양한 큐를 두어 수행한다. 

 

6. 스케쥴러

어떤 프로세스에게 자원을 할당할지 결정하는 운영체제 커널의 코드

  • 장기 스케쥴러 (long term scheduler) 혹은 작업 스케쥴러 (job scheduler) 
    • 어떤 프로세스를 준비 큐에 진입 시킬지 결정하는 역할
    • 준비 큐에 대기를 시키게 되므로 메모리를 할당하는 문제에도 관여
      • 메모리에 동시에 올라가 있는 프로세스의 수(degree of multirprogramming)를 조절하는 역할
    • 현대의 시분할 시스템용 운영체제에서는 사용을 안함
      • 과거의 적은 양의 메모리를 효율적으로 사용하기 위해 주로 사용됨
      • 대신 중기스케줄러를 두는 경우가 많음
  • 단기 스케쥴러 (short term scheduler) 혹은 CPU스케쥴러
    • 준비 큐에 대기 중인 프로세스들 중에 어떤 프로세스를 다음 번 실행 상태로 만들 것 인지 결정
    • 준비 큐에 대기 중인 프로세스들의 CPU 할당 순서를 결정
    • 시분할 시스템에서는 타이머 인터럽트가 발생하면 단기 스케쥴러가 호출된다. 
  • 중기 스케쥴러 (medium term scheduler)
    • 너무 많은 프로세스에게 메모리를 할당해 시스템의 성능이 저하되는 경우를 해결하기 위함
    • 프로세스의 수를 동적으로 조절하여 메모리 조절
      • 스왑 아웃(swap out) 을 이용하여 메모리를 조절
        • 프로세스 중 일부를 선정해 이들로부터 메모리를 통째로 빼앗아 그 내용을 디스크의 스왑영역에 저장
        • 0 순위인 프로세스는 봉쇄상태에 있는 프로세스 : 당장 CPU를 획득하지 않으므로 메모리가 필요없음
        • 다음 순위는 타이머 인터럽트가 발생해 준비 큐로 이동하는 프로세스
    • 중지 상태의 프로세스 등장
      • 중기 스케쥴러로 인해 실행, 준비, 봉쇄에서 중지(suspended, stopped) 상태가  추가됨
      • 말 그대로 이는 프로세스가 중지된 상태 -> 외부에서 재개시키지 않는 잇항 다시 활성화 X
      • 중지 상태로 들어가는 프로세스는 메모리를 통째로 빼앗긴다.
      • 세분화..
        • 중지 준비 : 준비 상태에 있던 프로세스가 중지
        • 중지 봉쇄 : 봉쇄 상태에 있던 프로세스가 중지
        • 두 경우도 모두 메모리는 보유하고 있지 않음

7. 프로세스의 생성

부모 프로세스가 자식 프로세스를 생성 -> 자식 프로세스가 죽음 -> 부모 프로세스가 처리 담당

  • 부모 프로세스(운영체제가 생성한 프로세스)
  • 자식 프로세스(부모 프로세스가 새롭게 생성한 프로세스)
    • 자식 프로세스를 생성할 때 자식 프로세스가 부모의 주소공간을 복제
    • 생성이 완료된 후에는 독자적인 주소 공간을 이용
  • 부모로 부터 생성된 모든 자식 프로세스가 처리되어야 부모 프로세스도 종료

프로세스가 작업을 수행하기 위해 자원을 할당 받는 방식

  • 운영체제로 부터 직접 할당
  • 부모와 자식이 공존하며 수행
    • 부모와 자식이 같이 CPU를 획득이 불가
    • 자식 프로세스의 종료를 기다리며 부모 프로세스가 봉쇄상태로 됨
    • 독립적인 관계

프로세스의 생성 절차 ( 유닉스 경우 p133)

  • 프로세스의 생성
    • fork() : 기존 프로세스 와 동일한 프로세스복사, 복사한 시점 부터 실행 
    • exec() : 새롭게 수행시키려는 프로세스를  새로운 프로그램으로 덮어씌우기, 첫 부분 부터 다시 실행
  • 프로세스의 종료
    • 자발적 종료 - exit()
    • 비발적 종료 - abort()

8. 프로세스간의 협력

원칙: 하나의 프로세스는 다른 프로세스의 수행에 영향을 미칠 수 없다.

 

  • 협력 메커니즘을 이용
    • 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있게 한다.
      • 효율성 증진을 위함 : 처리 결과 및 정보 공유, 처리속도 향상
    • 대표적인 메커니즘
      • Inter-Proces Communication(IPC) : 프로세스간의 통신과 동기화를 위한 메커니즘
        • 메세지 전달 방법 (커널을 통해서만 가능)
          • 프로세스간의 주소공간이 다름 -> 시스템 콜 방식으로 요청
            • 커뮤니케이션 링크 생성
            • send() 와 revceive() 이용 하여 메세지 전달
        • 통신방식
          • 메세지전달 방식 
            • 직접통신 (다른 프로세스간의 통신)
              • [프로세스 a]   -> [프로세스 b]
            • 간접통신 (메일박스라는 일종의 저장공간을 걸쳐서 통신)
              • [프로세스 a] -> [메일박스 m] -> [프로세스 b]
                • send(m, meesage), m이라는 메일박스에 메세지 전송
                • receive(m, message), m이라는 메일박스로 부터 메세지 수신
            • 두 방식의 차이는 연산의 인터페이스 차이
          • 공유메모리 방식
            • (운영체제가 지원) 공유메모리를 사용하는 시스템 콜 사용
            • 프로세스들이 주소공간의 일부를 공유하는 방식
              • 각자의 주소영역에 공통적으로 포함되는 영역 
              • 물리적으로 두 프로세스간에 공통영역을 매핑? 할당?
              • <단점> 서로의 데이터간의 일관성문제 유발할 가능성

 

+ Recent posts