Study 4주차 정리_Operating System

Park Jae Hong·2022년 6월 23일
0

프로세스의 개념

: 프로세스란 실행 중인 프로그램을 뜻으로 디스크에 실행 파일 형태로 존재하던 프로그램이 메모리에 올라가서 실행되기 시작하면 비로소 생명령을 갖는 프로세스가 된다.

  • 프로세스 문맥
    : 프로세스가 현재 어떤 상태에서 수행되고 있는지 정확히 규명하기 위해 필요한 정보를 의미한다.
  1. 하드웨어 문맥
    : CPU의 수행 상태를 나타내는 것 (프로그램 카운터 값, 각종 레지스터에 저장하고 있는 값)

  2. 프로세스의 주소 공간
    : 코드, 데이터, 스택으로 구성되는 독자적인 공간

  3. 커널 상의 문맥
    : 운영체제가 프로세스를 관리하기 위한 자료구조를 유지하는 것 (PCB, 커널스택)


프로세스 상태

  • 실행
    : 프로세스가 CPU 를 보유하고, 기계어 명령을 실행하고 있는 상태

  • 준비
    : 프로세스가 CPU만 보유하면 당장 명령을 실행할 수 있지만 CPU 를 할당받지 못한 상태를 가리킨다.

  • 봉쇄
    : CPU 를 할당 받더라도 당장 명령을 실행할 수 없는 프로세스 상태, 이는 자원을 효율적으로 관리하기 위해 나눈다.
    ( ex - 프로세스가 요청한 입출력 작업이 진행 중인 경우)

  • 프로세스를 생성 중이거나 종료 중인 일시적인 상태
    시작 상태
    : 프로세스가 시작되어 그 프로세스를 위한 각종 자료구조는 생성되었지만 아직 메모리 획득을 승인 받지 못한 상태
    완료 상태
    : 프로세스가 종료되었으나 운영체제가 그 프로세스와 관련된 자료구조를 완전히 정리하지 못한 상태

❗ 디스크에서 파일의 내용을 읽어와야 하는 명령 등 작업이 완료되어야 후속 처리가 가능한 경우 해당 작업이 완료 될때 까지 봉쇄 상태로 만들고 적절한 프로세스를 선정해 CPU를 할당한다.


프로세스 제어 블록 (PCB)

: 운영체제가 시스템 내의 프로세스 들을 관리하기 위해 프로세스마다 유지하는 정보들을 담는 커널 내의 자료구조를 뜻한다.

  • 프로세스 상태 : CPU 를 할당해도 되는지 여부를 결정하기 위해 필요.

  • 프로그램 카운터 값 : 다음에 수행할 명령의 위치를 가리킨다.

  • CPU 레지스터 값 : CPU 연산을 위해 현 시점에 레지스터에 어떤 값을 저장하는지 나타낸다.

  • CPU 스케줄링 정보, 메모리 관리 정보 : 각각 그 프로세스의 CPU 스케줄링과 메모리 할당을 위해 필요한 정보

  • 자원 사용 정보 : 사용자에게 자원 사용 요금을 계산해 청구하는 용도로 사용한다.

  • 입출력 상태 정보 : 프로세스가 오픈하는 파일 정보 등 프로세스의 입출력 관련 상태 정보를 나다낸다.


문맥 교환


프로세스를 스케줄링하기 위한 큐

준비 큐
: 운영체제는 준비 상태에 있는 프로세스들을 줄 세우기 위해 준비 큐를 두고 준비 큐의 제일 앞에 줄 서 있는 프로세스에 제일 먼저 CPU를 할당한다. 준비 큐에 프로세스를 줄 세우는 방법은 CPU 스케줄링 방법에 따라 달라진다 (6장)

장치 큐
: CPU 를 기다리는 프로세스를 줄 세우는 준비 큐 외에도 운영체제는 특정 자원을 기다리는 프로세스 들을 줄 세우기 위해 자원 별로 장치 큐를 둔다.

  • ❗소프트 웨어 자원을 기다리는 경우 공유데이터 와 같이 데이터의 일관성이 필요한 데이터는 준비 상태나 봉쇄 상태로 변경처럼 CPU 에 할당 받은 프로세스가 변경되는 경우의 접근을 허락 해서는 안된다.

작업 큐
: 시스템 내의 모든 프로세스를 관리하기 위한 큐로, 프로세스의 상태와 무관하게 현재 시스템내에 있는 모든 프로세스가 작업 큐에 속한다. (준비, 장치 큐 포함.)


스케줄러


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

장기 스케줄러 (작업 스케줄러)
: 어떤 프로세스를 준비 큐에 진입시킬지 결정하는 역할을 한다.

  • 상대적으로 가끔 호출되기 때문에 수행속도가 느려도 허용된다.

단기 스케줄러 (CPU 스케줄러)

: 준비 상태의 프로세스 중에서 어떤 프로세스를 다음번에 실행 상태로 만들 것인지 결정한다.

  • 시분할 시스템에서는 타이머 인터럽트가 발생하면 단기 스케줄러가 호출된다.
  • 매우 빈번하기 호출되기 때문에 수행속도가 빨라야한다.

❗ 과거에는 장기 스케줄러가 빈번히 호출되어 시스템 호츌이 매우 떨어져 프로세스의 수를 조절하는 역할도 했는데 현대는 시분할 시스템용 운영체제에서는 프로세스가 시작 상태가 되면 장기 스케줄러 없이 곧바로 프로세스에 메모리를 할당해 준비큐에 넣어줘서 장기 스케줄러 대신 중기 스케줄러를 두는 경우가 많다.

중기 스케줄러
: 너무 많은 프로세스에게 메모리를 할당해 시스템 성능이 저하되는 경우 이를 해결하기 위해 메모리에 적재된 프로세스의 수를 동적으로 조절하기 위해 추가된 스케줄러이다. 메모리에 올라와 있는 프로세스 중 일부를 선정해 이들로부터 메모리를 통째로 빼앗아 그 내용을 디스크의 스왑 영역에 저장한다. (스왑 아웃)

  • 중지 상태
    : 중기 스케줄러의 등장으로 프로세스 상태에 추가된 상태, 디스크로 스왑 아웃된 프로세스의 상태

  • 중지준비 상태
    : 준비 상태에 있던 프로세스가 중기 스케줄러에 의해 스왑 아웃된 상태
    중지봉쇄 상태
: 봉쇄 상태에 있던 프로세스가 중기 스케줄러에 의해 스왑 아웃된 상태


프로세스 생성


: 운영체제가 프로세스를 전부 생성하는 것은 아니다. 이미 존재하는 프로세스가 다른 프로세스를 복제 생성하게 된다. 이때 생성한 프로세스를 부모 프로세스, 생성된 프로세스를 자식 프로세스라고 부른다. 부모 프로세스를 종료하기 위해선 후손 프로세스를 모두 종료해야 종료할 수 있다.

자식 프로세스의 생성 방법은 fork() 시스템 콜을 해야한다.

  • fork() 시스템 콜
    : 사용 시보모, 자식 프로세스는 동일한 코드를 가질 수 밖에 없다. 따라서 자식과 부모가 다른 독자적인 프로그햄을 수행시킬수 있는 매커니즘이 필요하다.
    이때 사용하는 것이 exec() 시스템 콜이다.
  • exec () 시스템 콜
    : 프로세스가 지금까지 수행했던 상태를 잊어버리고 그 주소 공간을 완전히 새로운 프로그램으로 덮어씌운 후 새로운 프로그램의 첫 부분부터 다시 실행을 시작하도록 하는 시스템 콜이다.
  • wait () 시스템 콜
    : 자식 프로세스가 종료될 때 까지 부모 프로세스를 봉쇄 상태에 머무르도록 하는 시스템 콜이다. 


프로세스 종료

  • 자발적 종료
    : 프로세스는 시스템 콜을 통해 운영체제에게 자신이 종료됨을 알릴 수 있는 것. 이때 종료를 통보 받은 운영체제는 이 프로세스로부터 자원을 회수하고 시스템 내에서 이 프로세스를 정리하게 된다. exit() 함수는 프로그램 개발자가 명시적으로 호출하지 않아도 프로그램 종료되는 지점에 컴파일러가 자동으로 삽입해 프로세스의 종료 직전에 항상 호출한다. 때문에 프로세스 간의 동기화가 가능해진다.

  • 비자발적 종료
    : 부모 프로세스가 자식 프로세스의 수행을 강제 종료시키는 것이다. 이는 abort() 라는 함수를 통해 이우어지게 된다.

❗ 강제 종료되는 상황

- 자식 프로세스가 할당 자원의 한계치를 넘어서 많은 양의 자원을 요구할 때
- 자식 프로세스에게 할당된 작업이 더 이상 필요하지 않을 때
- 부모 프로세스가 종료(exit) 되는 경우 등

프로세스 간의 협력

: 프로세스는 각자의 독립적인 주소 공간을 가지고 있어, 다른 프로세스의 주소 공간을 참조하는 것을 허용하지 않는다. 이는 부모 프로세스, 자식 프로세스에도 동일하게 적용된다. 하지만 프로세스 간의 협력통해 효율성을 높일수 있다.

  • 협력 매커니즘
    : 대표적으로 IPC(Inter-Process Communication) 이 있다.
    IPC 란 하나의 컴퓨터 안에서 실행 중인 서로 다른 프로세스 간에 발생하는 통신을 말하고 동기화 보장 공유 데이터를 두 프로세스가 사용할 수 있다고 하면 데이터의 불일치 문제가 발생할 수 있기 때문에 프로세스 간의 통신과 동기화를 이루기 위한 메커니즘 필료.

  • 메세지 전달 방식
    : 프로세스 간에 공유 데이터를 일체 사용하지 않고 메시지를 주고받으면서 통신하는 방식

  • 직접 통신
    : 통신 하려는 프로세스의 이름을 명시적으로 표시한다

  • 간접 통신
    : 메시지를 메일 박스 또는 포트로 부터 전달 받는다

  • 공유메모리 방식
    : 본래 프로세스는 독립적인 주소 공간을 가져 그 주소 공간은 자신만 볼수 있다. 그렇지만 공유 메모리 영역은 각자의 주소 공간에 공통적으로 포함되는 영역이므로 여러 프로세스가 읽고 쓰는게 가능하다.

profile
The people who are crazy enough to think they can change the world are the ones who do. -Steve Jobs-

0개의 댓글

관련 채용 정보