ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 운영체제 02
    쾌락없는 책임 (공부)/운영체제 2021. 4. 10. 11:19
    반응형

    본 포스트는 '신용현'교수님의 운영체제 강의를 듣고

    이해, 정리한 내용들을 올린 포스트입니다.

    - 강의자료는 올리지 않습니다.


    <프로세스>

    1. 프로세스란

    - 운영체제는 동시에 여러 프로그램을 돌리고 있습니다. 이걸 job, process라고 부릅니다. 한마디로 프로세스는 실행중인 프로그램이라고 할 수 있습니다.

     

    2. 프로세스의 주소 공간이 포함하는 것들

    - 프로그램의 코드 (text 구역이라고도 불립니다, 프로그램을 해석하면 결국 2진수가 되니깐)

    - 데이터 구역  (전역변수, 프로세스가 종료되지 않는 이상 남아있는 변수들)

    - 스택  (로컬 변수, 함수 인자, 리턴 값 등이 저장되는 곳)

    - 힙 (수행중 동적으로 할당됩니다. 줄어들기도 하고 커지기도 합니다)

    - 다음 해야할 일의 주소를 가리키는 프로그램 카운터

     

    3. 프로세스의 상태

     - new : 프로세스가 새로 생성된 상태

     - running 

     - waiting : 이벤트가 일어나기까지 프로세스가 기다리는 중    (읽기, 쓰기는 CPU에서 안해서 IO작업시 CPU가 작업을 내보낸다)

     - ready : CPU에 할당되기를 기다리는 상태  

     - terminated : 삭제, 리소스들을 전부 반환하는 상태

     프로세스들의 상태와 관련해서는 이후 운영체제 알고리즘에서도 자세히 보게 됩니다.

     

    4. 프로세스 컨트롤 블락 (PCB)

    - 프로세스의 정보를 저장하는 데이터 구조로 metadata를 저장한다고 합니다. 프로세스와 관련한 정보는 프로세스의 id, 상태, program counter, 스케쥴링 정보, 메모리 관련 정보, io 상태 정보 등등이 들어 있습니다.

     

     

    <프로세스 스케쥴링 큐>

     CPU는 한개의 프로세스만 작업할 수 있어서 작업하지 못하는 프로세스들은 Ready Queue에 대기시키고 있습니다. 이후 순서가 오면 이곳에 있던 Ready상태의 프로세스들이 CPU로 이동 Run상태로 변경되면서 실행됩니다.

     또한 각 장치들에 대한 프로세스들 (특히 IO 작업)을 관리하는 큐는 Device Queue라고 하며 이건 레디 큐의 하위 개념이라고 보면 됩니다. 즉, 장치 큐를 벗어나야 레디 큐로 갈 수 있습니다.

     위 IO작업들이 레디 큐 > CPU > 장치 큐 > 레디 큐 > CPU ... 이런 식으로 이동하는것처럼 각 프로세스들은 여러 큐를 이동하면서 실행되게 됩니다.

     

     

    <CPU 스케쥴러>

    레디 큐에 있는걸 빼내 CPU에 할당하고, 다음 할 일을 정해주는걸 스케쥴러가 해줍니다.

     - 이후 더 자세히 배우게 됩니다.

     

     

    <CPU의 작업 변경>

     작업을 하다가 중지(완료 아님!)하면 다음에 다시 작업을 하기 위해 주소값과 상태가 필요하게 됩니다. 이후 이 값들은 다시 프로세스를 시작할때 사용하게 됩니다. 

     대신 주소값을 가지다 보니 오버헤드에 주의해야 합니다. 또한 하드웨어 속도()에 따라 이 작업의 속도가 결정됩니다.

     

     

    <프로세스 생성>

     프로세스는 부모, 자식 관계가 있으며 부모 프로세스가 자식 프로세스를 생성함으로서 트리 구조를 가지게 됩니다. 이런 자식 프로세스도 리소스가 필요한데 이건 부모가 리소스를 공유하거나 OS가 할당해줍니다.

     부모와 자식이 리소스를 공유하는건 전부, 일부분만, 전혀 하지 않는 등 다양하게 공유하게 됩니다. 또한 실행 순서도 자식 먼저 수행하거나 병렬로 진행하는 등 여러 방법이 있습니다.

     

    - 자식 프로세스 생성 요약

      - OS 커널에 새 PCB 할당      - 메모리에 할당       - 프로그램을 메모리에 올림       - 초기화 후 실행

     

     

    <프로세스 제거>

     프로세스가 마지막 작업을 하면 OS에게 종료를 요청하고 OS가 삭제해줍니다. 이와 동시에 할당한 리소스들을 돌려받게 됩니다. 만약 자식 프로세스가 있는 경우 자식 프로세스는 자신의 상태를 부모에게 전달하게 되는데 이와 관련해서 자식을 종료하는 방식이 많습니다.

     

    1. 자식 프로세스의 리소스를 모두 비활성화 후 종료

    2. 부모가 강제로 종료(비정상적), 할당된 리소스 모두 제거

     

     보통의 경우 자식이 먼저 종료되고 부모가 종료됩니다. 그런데 부모가 먼저 종료되는 경우 연쇄 종료를 하게 됩니다. 즉, 모든 자식들을 연쇄적으로 종료하는 겁니다. 

     일반적으로 종료를 할 때 부모가 wait하고 자식이 exit해야 종료를 하게 됩니다. 그런데 자식이 exit를 했는데 눈떠보니 부모가 wait을 하지 않으면 좀비 프로세스가 되어 버립니다. 또 부모가 wait없이 종료되면 자식은 orphan(고아)프로세스가 됩니다.

     위에서 연쇄적으로 없앤다고 했는데 사실 부모가 없어지면 자식이 init가 됩니다. 

     

      - 이 부분이 복잡해서 추가 공부가 필요합니다.

    반응형

    '쾌락없는 책임 (공부) > 운영체제' 카테고리의 다른 글

    운영체제 06  (0) 2021.05.27
    운영체제 05  (0) 2021.05.19
    운영체제 04  (0) 2021.05.19
    운영체제 03  (0) 2021.04.10
    운영체제 01  (0) 2021.04.09

    댓글

Designed by Tistory.