프로세스 관리

|


‘운영체제와 정보기술의 원리’ 5장을 학습한 내용을 정리한 포스팅입니다


프로세스 관리


프로세스

​ 수행중인 프로그램을 뜻한다


프로세스 문맥 (process context)

프로세스가 현재 어떤 상태에서 수행되고 있는지를 정확히 규명하기 위해 필요한 정보. 시분할 시스템 환경에서 타이머 인터럽 트에 의해 짧은 시간 동안 CPU를 사용한 후 CPU를 선점당했다가 추후에 다시 CPU를 획득하는 식으로 CPU 관리가 이루어진 다. 따라서 CPU를 다시 획득해 명령의 수행을 재개하는 시점이 되면 지난 번 CPU 보유 시기에 어느 부분까지 명령을 수행했는 지 직전 수행 시점의 정확한 상태를 재현할 필요가 있다. 이때 필요한 정보가 프로세스 문맥이다


프로세스 문맥 3요소

  • 하드웨어 문맥
    • 하드웨어 문맥은 CPU의 수행 상태를 나타내는 것으로 프로그램 카운터값과 각종 레지스터에 저장하고 있는 값
  • 프로세스의 주소 공간
    • 코드, 데이터, 스택으로 구성됨
  • 커널 상의 문맥
    • 프로세스를 관리하기 위한 PCB와 커널 스택




프로세스의 상태

프로세스는 아래 사진 중 어느 한 상태에 머물러 있게 된다. 그리고 그 상태는 시간의 흐름에 따라 변하게 된다.

원래 수행중이던 프로세스를 준비 상태로 바꾸고 새로운 프로세스를 실행상태로 바꾸는 과정에서 컨텍스트 스위칭이 발생한다. 컨텍스트 스위칭은 원래 수행 중이던 프로세스의 문맥을 PCB에 저장하고 새로운 프로세스의 문맥을 PCB로부터 가져와세팅하는 과정을 의미한다. 하나의 프로세스에서 시스템 콜이나 인터럽트가 발생하면 CPU의 제어권이 운영체제에게로 넘어와 원래 실행 중이던 프로세스에서 커널의 코드가 실행된다. 이 경우에도 CPU의 실행 위치 등 프로세스의 문맥 중 일부를 PCB에 저장하게 되지만 이러한 과정을 컨텍스트 스위칭이라고 하지 않는다. 이는 하나의 프로세스가 사용자 모드에서 커널 모드로 실행 모드만 바뀌는 것일뿐 CPU를 점유하는 프로세스가 다른 사용자 프로세스로 변경되는 과정이 아니기 때문이다. 이와 같은 모드 변경에 비해 문맥 교환에는 훨씬 많은 오버헤드가 뒤따르게 된다.

Process A에서 인터럽트 또는 시스템콜 발생(사용자모드) -> 커널모드 -> Process A(사용자 모드)로 복귀

-> 모드 변경

Process A에서 타이머 인터럽트 또는 I/O 요청 발생(사용자모드) -> 커널모드 -> Process B로 변경

-> 컨텍스트 스위칭

준비 상태에 있는 프로세스들 중에서 CPU를 할당받을 프로세스를 선택한 후 실제로 CPU의 제어권을 넘겨받는 과정을 CPU 디스패치 라고 한다.

Process-state.jpg

  • 실행(running)
    • 프로세스가 CPU를 보유하고 기계어 명령을 실행하고 있는 상태
  • 준비(ready)
    • 프로세스가 CPU만 보유하면 당장 명령을 실행할 수 있지만 CPU를 할당받지 못한 상태
  • 봉쇄(blocked, wait, sleep)
    • 프로세스에게 CPU를 주어도 당장 명령을 실행할 수 없는 상태
  • 시작(new)
    • 프로세스가 생성중인 상태 (일시적)
    • 프로세스가 시작되어 그 프로세스를 위한 각종 자료 구조는 생성되었지만 아직 메모리 획득을 승인받지 못한 상태
  • 완료(terminated)
    • 프로세스가 종료중인 상태 (일시적)
    • 프로세스가 종료되었으나 운영체제가 그 프로세스와 관련된 자료 구조를 완전히 정리하지 못한 상태


입출력 과정

입출력이 요청되면 CPU를 반환한 다음 디스크 서비스를 기다리는 장치 큐에 가서 줄을 서게 되며 이때 프로세스의 상태는 봉쇄 상태가 된다. 그리고 CPU는 즉시 실행할 수 있는 상태인 준비 큐에서 프로세스를 하나 선정해서 CPU를 할당한다. 입출력 작업이 끝나면 디스크 컨트롤러가 CPU에게 인터럽트를 발생시켜 입출력이 완료되었다는 것을 알린다. 그러면 CPU는 어떤 프로세스를 실행하고 있다가 인터럽트가 발생한 것을 확인하고 그에 대응하는 루틴을 실행한다. 루틴이 하는 일은 입출력이 완료된 프로세스를 장치 큐에서 빼내어 CPU를 기다리는 준비 큐에 넣고 프로세스의 상태를 준비상태로 바꾼 후 장치의 로컬 버퍼에 있는 내용을 메모리로 이동시키는 일련의 업무다.




프로세스 제어 블록(PCB)

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


PCB 구성요소

img

  • 프로세스의 상태
    • CPU를 할당해도 되는지 여부를 결정하기 위해 필요하다
  • 프로그램 카운터 값
    • 다음에 수행할 명령의 위치를 가리킨다
  • CPU 레지스터
    • CPU 연산을 위해 현 시점에 레지스터에 어떤 값을 저장하고 있는지를 나타낸다
  • CPU 스케줄링 정보, 메모리 관리 정보
    • 각각 그 프로세스의 CPU 스케줄링과 메모리 할당을 위해 필요한 정보
  • 자원 사용 정보
    • 사용자에게 자원 사용 요금을 계산해 청구하는 용도
  • 입출력 상태 정보




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

​ 프로세스를 스케줄링 하기 위한 큐에는 작업 큐, 준비 큐, 장치 큐 등이 있다.

  • 작업 큐
    • 시스템의 모든 프로세스를 관리하기 위한 큐로 프로세스의 상태와 무관하게 현재 시스템 내에 있는 모든 프로세스가 작업 큐에 속하게 된다. 그러나 작업 큐에 있다고 해서 반드시 메모리를 가지고 있는 것은 아니다.
  • 준비 큐
    • 준비 큐는 CPU를 할당받고 실행되기 위해 기다리고 있는 프로세스의 집합을 말한다.
  • 장치 큐
    • 각각의 장치마다 서비스를 기다리며 줄 서 있는 프로세스의 큐를 말한다.
    • 장치 큐에 속한 프로세스는 봉쇄 상태에 있게 된다

img




스케줄러

​ 어떤 프로세스에게 자원을 할당할지를 결졍하는 운영 체제 커널의 모듈


스케줄러의 종류

  • 장기 스케줄러

    • 작업 스케줄러라고도 부르며, 어떤 프로세스를 준비 큐에 삽입할지를 결정하는 역활을 한다.
    • 수십 초 내지 수 분 단위로 가끔 호출되기 때문에 상대적으로 속도가 느린 것이 허용된다
    • 현대 시분할 시스템에서 사용되는 운영체제에는 일반적으로 장기 스케줄러를 두지 않는 경우가 대부분이다.
    • 현대 시분할 시스템에서는 프로세스가 시작 상태가 되면 장기 스케줄러 없이 곧바로 그 프로세스에 메모리를 할당해 준비 큐에 넣어준다
  • 중기 스케줄러

    • 너무 많은 프로세스에게 메모리를 할당해 시스템의 성능이 저하되는 경우를 해결하기 위한 스케줄러

    • 메모리에 적재된 프로세스의 수를 동적으로 조절한다.

    • 0순위 : blocked 된 프로세스를 스왑아웃

    • 1순위 : 타이머 인터럽트가 발생해 준비 큐로 이동하는 프로세스를 추가적으로 스왑아웃

    • 중기 스케줄러의 등장으로 프로세스의 상태는 실행, 준비, 봉쇄 외에 중지(suspended, stopped)가 추가되었다

      (아래 사진 참고)

    • 중지 상태에 있는 프로세스는 외부에게 재개시키지 않는 이상 다시 활성화될 수 없으므로 메모리 자원이 당장 필요하지 않다. 따라서, 중지 상태의 프로세스는 메모리를 통째로 빼앗기고 디스크로 스왑 아웃된다

    • 봉쇄 상태 -> 스왑 아웃 : suspended blocked, 준비 상태 -> 스왑 아웃 : suspended ready

  • 단기 스케줄러

    • CPU 스케줄러라고도 하며, 준비 상태의 프로세스 중에서 어떤 프로세스를 다음 번에 실행 상태로 만들 것인지를 결정한다. 시분할 시스템에서는 타이머 인터럽트가 발생하면 단기 스케줄러가 호출된다
    • 밀리 세컨드 이하의 시간 단위로 매우 빈번하게 호출되기 때문에 수행 속도가 충분히 빨라야 한다

img




프로세스의 생성

시스템이 부팅된 후 최초의 프로세스는 운영체제가 직접 생성하지만 그 다음부터는 이미 존재하는 프로세스가 다른 프로세스를 복제 생성하게 된다. 이때 프로세스를 생성한 프로세스를 부모 프로세스라고 하고 새롭게 생성된 프로세스를 자식 프로세스라고 한다. 즉, 부모 프로세스가 자식 프로세스를 생성한다. 프로세스가 생성되면 자신만의 독자적인 주소 공간을 갖게 되며, 부모 프 로세스와 동일한 내용을 그대로 복사해서 생성한다. (PID를 제외하고 부모와 자식 프로세스 내용이 같음)


프로세스 모델

  • 부모와 자식이 공존하며 수행되는 모델
    • 부모와 자식이 경쟁하는 관계
  • 자식이 종료될 때까지 부모가 기다리는 모델
    • 자식 프로세스가 종료될 때까지 부모 프로세스는 아무 일도 하지않고 봉쇄 상태에 머물러 있다가 자식 프로세스가 종료되면 그 때 부모 프로세스가 준비 상태가 되어 다시 CPU를 얻을 권한이 생기게 된다
    • ex) DOS 커맨드창


프로세스 간의 협력

프로세스는 각자 자신만의 독립적인 주소 공간을 가지고 수행되며 다른 프로세스의 주소 공간을 참조하는 것은 원칙적으로는 허용되지 않는다. 하지만 프로세스들 간에 서로 협력할 때 효율적인 경우가 발생할 수 있다. 프로세스 간의 협력을 위해 운영체 제가 제공하는 대표적인 것으로는 IPC(Inter-Process Communication)이 있다.


IPC

하나의 컴퓨터 안에서 실행중인 서로 다른 프로세스 간의 발생하는 통신을 말한다.

의사소통 기능 + 동기화를 보장해주어야 한다

  • 메시지 전달 방식
    • 프로세스 간의 공유 변수를 일체 사용하지 않고 메시지를 주고 받으면서 통신하는 방식
    • 두 프로세스의 주소 공간이 다르므로 커널의 시스템콜을 통해 통신한다
  • 공유 메모리 방식
    • 커널의 시스템콜을 이용하여 주소 공간의 일부를 공유한다
    • 프로세스 A와 B가 주소공간을 독립적으로 가지고 있지만 이 주소 공간이 물리적 메모리에 매핑될 때 공유 메모리 주소 영역에 대해서는 동일한 물리적 메모리로 매핑된다. 서로 간의 데이터 일관성 문제가 유발될 수 있으므로 동기화 문제를 고려해야 한다

img

ref. 운영체제와 정보기술의 원리

ref. states of process

ref. IPC

인터럽트의 원리

|


‘운영체제와 정보기술의 원리’ 4장을 학습한 내용을 정리한 포스팅입니다


인터럽트의 원리

프로그램의 3요소

  • 코드
    • 우리가 작성한 프로그램 함수들의 코드가 기계어 명령으로 변환되어 저장되는 부분
  • 데이터
    • 전역 변수 등 프로그램이 사용하는 데이터를 저장하는 부분
  • 스택
    • 함수가 호출될 때 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장하는 데 사용되는 공간


프로세스

​ 현재 실행 중인 프로그램


프로세스의 상태

  • 실행
    • CPU를 할당받고 기계어 명령을 수행하고 있는 프로세스의 상태
  • 준비
    • CPU만 할당받으면 당장 명령을 수행할 수 있지만 현재 CPU를 할당받지 못한 프로세스의 상태
    • 준비 상태에 있는 프로세스들을 줄 세우기 위해 준비 큐가 존재한다
    • 특정 자원을 기다리는 프로세스들을 위해 자원별로 큐가 존재한다
    • 예시 - 입출력 서비스를 요청한 프로세스는 입출력 큐에 줄서게 되고, 입출력 작업이 완료되면 입출력 큐에서 빠져나와 CPU를 기다리는 준비 큐에 줄 서게된다
  • 봉쇄
    • CPU를 할당받더라도 명령을 수행할 수 없는 프로세스의 상태
    • 예를 들어 프로세스가 요청한 입출력 작업이 진행중인 경우

인터럽트의 동작원리

​ 함수의 호출과 비슷하다. A라는 프로그램이 CPU를 할당받고 명령을 수행하고 있는데 인터럽트가 발생하면 A는 현재 수행중인 명령의 위치를 저장해 놓는다. 그 후 운영체제 내부코드인 인터럽트 처리 루틴으로 넘어가서 인터럽트 처리를 하고 다시 돌아와 A의 이전 작업 지점부터 수행을 계속 이어나가게 된다.


​ 인터럽트 때문에 CPU를 선점당한 위치를 저장하기 위한 공간은 커널부분에 존재한다 (해당 프로세스의 PCB에 저장)


커널 구조

​ 커널도 하나의 프로그램으로 code, data, stack 을 가진다

  • 코드
    • CPU, 메모리 등의 자원을 관리하기 위한 부분과 시스템콜, 인터럽트 서비스 루틴, 사용자 인터페이스를 제공하기 위한 부분이 주를 이룬다
  • 데이터
    • 각종 자원을 관리하기 위한 자료구조가 저장된다
    • 각 프로세스의 상태, CPU 사용정보, 메모리 사용정보 등을 유지하기 위한 PCB가 존재한다
  • 스택
    • 프로세스별 스택이 존재한다. 시스템 콜을 호출하고 시스템 콜 내부에서 다른 함수를 호출하는 경우 그 복 귀 주소는 커널 내부 주소가 되므로 사용자 프로그램의 스택과는 별도로 저장 공간이 필요하기 때문이다.

os_3_2




컴퓨터 시스템의 작동 개요

​ CPU는 빠른 속도로 처리하는 계산 능력은 가지고 있지만, 어떠한 작업을 수행해야 하는지에 대해 스스로 결정하는 능력은 없다

​ 현재 수행해야 할 메모리 주소의 명령을 있는 그대로 처리할 뿐이다. CPU가 수행해야 할 메모리 주소를 담고있는 레지스터를 프로그램 카운터라고 한다.


주변 장치가 CPU에게 서비스를 요청할 때 인터럽트를 발생시킨다

​ CPU는 프로그램 카운터가 가리키는 메모리 위치의 명령만 수행하고 있기 때문에 주변 장치의 상태를 지속적으로 파악할 수 없 다. 따라서, 주변장치는 CPU의 도움이 필요한 경우 인터럽트를 사용해 CPU에게 서비스를 요청하게 된다. 인터럽트를 발생시 키기 위해 주변 장치는 인터럽트 라인을 세팅하게 되고 CPU는 매번 명령을 수행한 직후 인터럽트 라인을 체크해 서비스 요청이 들어왔는지를 체크하게 된다.




프로그램의 실행

  • 디스크에 존재하던 실행 파일이 메모리에 적재됨을 의미
  • 프로그램이 CPU를 할당받고 명령을 수행하고 있는 상태를 의미
  • 프로그램 실행 파일이 메모리에 적재될 때 실행 파일 전체가 메모리에 한꺼번에 올라가기보다는 일부분만 메모리에 올라가고 나머지는 디스크의 특정 영역에 내려가 있는 것이 일반적이다
  • 각각의 프로그램은 주소공간을 별도로 가지며, 이러한 공간을 가상메모리 또는 논리적 메모리라고 부른다. 이는 물리적 메모리의 주소와 독립적으로 각 프로그램마다 독자적인 주소 공간을 가지기 때문에 지칭하는 용어이다.




인터럽트 벡터

​ 여러가지 인터럽트에 대해 해당 인터럽트 발생시 처리해야 할 루틴의 주소를 보관하고 있는 테이블을 의미한다.

​ 일종의 함수를 가리키는 포인터라고도 할 수 있다


인터럽트 핸들러

​ 실제 인터럽트를 처리하기 위한 루틴으로 인터럽스 서비스 루틴이라고도 부른다


ref. 운영체제와 정보기술의 원리

ref. https://kouzie.github.io/

컴퓨터 시스템의 동작 원리

|


‘운영체제와 정보기술의 원리’ 3장을 학습한 내용을 정리한 포스팅입니다


컴퓨터 시스템의 동작 원리


컴퓨터 시스템의 구조

  • 컴퓨터 시스템 구조
    • 내부 장치 : CPU, 메모리
    • 외부 장치 : 디스크, 키보드, 마우스, 모니터 …
  • 컴퓨터 내부로 데이터가 들어오는것을 입력(input) 컴퓨터 외부로 데이터가 나가는 것이 출력(output)
    • 키보드로부터 입력을 받아서 컴퓨터가 어떤 연산을 한 후 그 결과를 모니터에 출력하는 경우가 대표적인 입출력(I/O)
    • 컴퓨터 외부 장치를 입출력 장치라고 부른다
  • 컴퓨터 하드웨어 장치에는 컨트롤러라는 것이 붙어 있다. 컨트롤러는 일종의 작은 CPU로서 각각의 하드웨어를 제어한다



CPU와 I/O 연산

  • 입출력 장치와 메인 CPU는 동시 수행이 가능하다

    • CPU가 A프로그램 코드를 실행 중이고, B라는 프로그램은 하드 디스크에서 어떠한 정보를 읽어오는 작업을 수행하는 상황을 생각해볼 수 있다

    • 각 장치마다 이를 제어하기 위해 설치된 장치 컨트롤러에는 장치로부터 들어오고 나가는 데이터를 임시로 저장하기 위한 로컬 버퍼가 존재한다

    • 디스크나 키보드 등에서 데이터를 읽어오는 경우, 우선 로컬 버퍼에 데이터가 임시로 저장된 후 메모리에 전달된다. 장치에서 로컬 버퍼로 읽어오는 일은 컨트롤러가 담당한다

    • 원하는 데이터를 로컬 버퍼로 다 읽어오고 나면, 컨트롤러가 CPU에게 인터럽트를 발생시켜 작업이 완료됐음을 알린다

      인터럽트란?

      컨트롤러들이 CPU의 서비스가 필요할때 이를 통보하는 방법 (하드웨어 인터럽트)

      소프트웨어 인터럽트는 트랩 이라는 용어로도 불리며 예외, 시스템 콜 등이 있다

      예외 - 0으로 나누는 연산, 자신의 메모리 영역 바깥 부분을 접근하려는 시도 등등

      시스템 콜 - 프로그램이 자신이 작성하지 않은 코드를 운영체제로부터 서비스 받기 위해 발생시키는 것

      CPU옆에는 인터럽트 라인이 있어서, CPU가 자신의 작업을 하던 중간에 인터럽트 라인에 신호가 들어오면 하던 일을 멈추고, 인터럽트와 관련된 일을 처리한다. 좀더 정확히 설명하면 CPU는 명령 하나를 수행할 때마다 인터럽트가 발생했는지를 체크하게 된다.



인터럽트의 일반적 기능

  • 운영체제 커널에는 인터럽트가 들어왔을 때 해야 할일을 미리 다 프로그래밍해서 보관하고 있다. 이를 인터럽트 서비스 루틴이라고 한다



인터럽트 핸들링(=인터럽트 서비스 루틴)

  • 다양한 인터럽트에 대해 각각 처리해야 할 업무들을 정의하고 있다. 디스크 컨트롤러가 인터럽트를 발생시키면 CPU는 하던 일을 잠시 멈추고 이 인터럽트가 발생했을 때 수행해야 할 코드 영역으로 가서 정의된 일을 수행하게 된다. 이떄 수행하는 구체적인 일들은 다음과 같다.
  • 프로그램 A가 수행되고 있을 때 인터럽트가 발생하면 A의 현재 상태를 저장한다. 현재 상태란 현재 CPU가 수행중이던 메모리 주소를 포함해 몇 가지 부가적인 정보들을 의미한다.
  • 커널 영역에는 현재 시스템 내에서 수행되는 프로그램들을 관리하기 위한 자료구조인 프로세스 제어 블록(PCB) 이 존재한다
  • PCB의 일부분은 인터럽트가 발생했을 때 프로그램의 어느 부분이 수행되던 중이었는지를 저장하기 위한 자료구조로 이용된다. 이 부분에 저장되는 내용으로는 현재 수행중이던 메모리 주소와 레지스터 값, 그리고 하드웨어 상태 등이 있다. 이러한 정보가 저장되었다가 인터럽트 수행이 끝나면 저장된 값을 CPU 상에 다시 복원해 인터럽트 당하기 직전의 명령을 계속 수행할 수 있게 되는 것이다.
  • 원칙적으로 인터럽트 처리 중에 또 다른 인터럽트가 발생하는 것을 허용하지 않지만 인터럽트의 중요도에 따라 예외 상황이 발생할 수 있다

img

interrupt handle detail

  1. 커널에 들어가는 동안 현재 실행중인 프로세스의 컨텍스트(CPU의 모든 레지스터의 값)가 먼저 메모리에 저장된다.
  2. 예외 / 인터럽트를 처리한다.
  3. 복원 및 재개할 프로세스를 선택한다.
  4. 선택한 프로세스의 컨텍스트를 복구한다.
  5. 선택한 프로세스의 실행을 재개한다.



Synchronous I/O vs Asynchronous I/O

  • 동기식 입출력(Synchronous blocking I/O)을 사용하면 입출력이 완료될 때까지 CPU는 다음 명령을 수행할 수 없기 때문에 비동기식 입출력(Asynchronous blocking I/O)을 사용하는 것이 효율적이다. 해당 문맥에서 말하는 Asynchronous는 CPU입장에서의 의미이고, 프로그램 입장에서는 Synchronous를 의미한다.
  • 같은 자원에 대한 입출력이 동시에 발생할 수 있으므로 동기성을 보장하기 위해 장치마다 큐를 두어 요청된 순서대로 처리할 수 있도록 한다



DMA(Direct Memory Access)

  • 일종의 컨트롤러로서, CPU가 주변 장치들의 메모리 접근 요청에 의해 자주 인터럽트 당하는 것을 막아주는 역활을 한다
  • DMA를 사용하면 로컬 버퍼에서 메모리로 읽어오는 작업을 CPU가 담당하는 것이 아니라 DMA가 대행함으로써 CPU는 원래 하던 작업을 멈추고 인터럽트를 처리할 필요가 없어지는 것이다.



Dual mode operation

img

  • 사용자 프로세스로부터 운영체제를 보호하기 위해 하드웨어 차원에서 유저모드커널모드가 존재한다
  • 유저모드에서 제한된 명령은 커널모드에 위임하여 처리한다(보안과 관련된 명령)
  • 커널모드가 더 큰 권한을 가지며, CPU 내부의 모드 비트를 두어 시스템 콜을 호출할 때는 0으로 전환되고 운영체제가 모든 요청을 끝낸 후에는 1로 변경하여 사용자 프로그램에게 CPU 선점권을 넘겨준다

ref. 운영체제와 정보기술의 원리

ref. Uppsala university

ref. 동기식 vs 비동기식, blocking vs non-blocking

ref. non-blocking IO, non-blocking Algorithm

ref. Boost application performance using asynchronous I/O

ref. wiki

N과 M(1)

|
import java.util.Scanner;

public class BOJ_15649 {
    static boolean[] check = new boolean[9];
    static int[] answer = new int[9];

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        go(1, n, m);
    }

    private static void go(int index, int n, int m) {
        if (index == m + 1) {
            for (int i = 1; i <= m; i++) {
                System.out.print(answer[i]);
                if (i != m) System.out.print(' ');
            }
            System.out.println();
            return;
        }
        for (int i = 1; i <= n; i++) {
            if (check[i]) continue;
            check[i] = true;
            answer[index] = i;
            go(index + 1, n, m);
            check[i] = false;
        }
    }
}

운영체제

|


‘운영체제와 정보기술의 원리’ 2장을 학습한 내용을 정리한 포스팅입니다


운영 체제


운영체제란

​ 컴퓨터 하드웨어 바로 윗단에 설치되는 소프트웨어

img




커널

​ 컴퓨터 전원을 켜면 운영체제는 이와 동시에 수행된다. 한편 소프트웨어가 컴퓨터 시스템에서 수행되기 위해서는 메모리에 그 프로그램이 올라가 있어야 한다. 운영체제 자체도 하나의 소프트웨어로서 전원이 켜짐과 동시에 메모리에 올라간다. 하지만, 운 영체제처럼 규모가 큰 포로그램이 모두 메모리에 올라가면 한정된 메모리 공간의 낭비가 심할 것이다. 따라서 운영체제 중 항상 필요한 부분만을 전원이 켜짐과 동시에 메모리에 올려놓고 그렇지 않은 부분은 필요할 때에 메모리에 올려서 사용하게 된다. 이 때, 메모리에 상주하는 운영체제 부분을 커널이라고 부른다.


운영체제의 기능

컴퓨터 시스템 내의 자원을 효율적으로 관리하는 역활

  • 자원이란 CPU, 메모리, 하드 디스크 등 하드웨어 자원 뿐만 아니라 소프트웨어 자원까지 통칭하는 말
  • 효율성이 가장 큰 목표이지만 이로 인해 일부가 지나치게 희생되지 않게하는 형평성 역시 운영체제가 고려해야할 목표
  • 사용자와 운영체제 자신을 보호하는 역활도 담당

img


컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공하는 역활

​ 하드웨어를 직접 다루는 복잡한 부분은 운영체제가 대행해주고, 각 사용자 및 프로그램은 그에 대한 자세한 내용을 알지 못해도 프로그램을 수행할 수 있도록 해주는 기능을 뜻한다




운영체제의 분류

1. 동시 작업을 지원하는지의 여부

  • 단일 작업용 운영체제
    • MS DOS - 하나의 프로그램이 수행되는 동안 다른 프로그램 실행 x
  • 다중 작업용 운영체제
    • MS 윈도우즈, 유닉스


다중 작업용 운영체제를 또 다시 분류하면

시분할 시스템 (N명의 사용자 기준)

  • 다중 작업용 운영체제라 하더라도 CPU에서는 매 순간 하나의 프로그램만이 수행될 수 있다. 여러 프로그램들이 짧은 시간 규모로 CPU에서 번갈아 수행되기 때문에 사용자 입장에서는 여러 프로그램이 동시에 수행되는 것처럼 보인다. 이와 같이 CPU의 작업시간을 여러 프로그램들이 조금씩 나눠 쓰는 시스템을 시분할 시스템이라 한다

멀티 프로그래밍 시스템 (1명의 사용자 기준)

  • CPU와 달리 메모리의 경우 여러 프로그램들이 조금씩 메모리 공간을 보유하며 동시에 메모리에 올라가 있을 수 있다. 이처럼 메모리 공간을 분할해 여러 프로그램들을 동시에 메모리에 올려놓고 처리하는 시스템을 다중 프로그래밍 시스템이라고 부른다

멀티 프로세서 시스템

  • 하나의 컴퓨터안에 CPU가 여러개 설치된 경우를 뜻하므로 위의 용어들과는 의미가 다르다. CPU가 여럿 있는 컴퓨터는 서로 다른 CPU안에서 여러 프로그램이 동시에 수행될 수 있어 처리가 더욱 빨라지지만, 운영체제 입장에서는 여러 CPU를 관리하기 위해 더욱 복잡한 매커니즘을 사용해야한다


2. 작업을 처리하는 방식

  • 일괄 처리 방식
    • 처리해야할 여러 작업을 모아 일정량이 쌓이면 일괄적으로 처리한다
    • 사용자 입장에서는 응답 시간이 길다
  • 시분할 방식
    • 여러 작업을 수행할 때 컴퓨터 처리능력을 일정한 시간단위로 분할해 사용하는 방식
    • 일괄처리 방식에 비해 짧은 응답시간을 가진다
  • 실시간 방식
    • 정해진 시간안에 어떠한 일이 반드시 종료됨이 보장되어야 하는 시스템에서 사용한다
    • 원자로, 공장, 미사일 제어 시스템 등에 사용한다




운영체제의 자원 관리 기능

​ 운영체제의 가장 핵심적인 기능은 자원을 효율적으로 관리하는 것이다. 자원은 크게 하드웨어와 소프트웨어로 나뉜다


하드웨어 - CPU, 메모리, 주변 장치 및 입출력 장치 등등


CPU를 관리하는 방법

  • 일반적인 컴퓨터에는 CPU가 하나밖에 없지만 프로세스는 여러 개가 동시에 실행된다. 그러므로 매 시점 어떠한 프로세스에게 CPU를 할당해 작업을 처리할 것인지를 결정하는 일이 필요하다. 이러한 일을 CPU 스케줄링이라고 한다.
  • CPU 스케줄링 기법에는 선입선출, 라운드 로빈, 우선순위 기법이 있다
    • 선입선출 기법
      • 먼저 CPU를 사용하기 위해 도착한 프로세스를 먼저 처리해 주는 방식
      • 작업 시간이 긴 프로세스가 앞에 있고, 작업 시간이 짧은 프로세스가 뒤에 있다면 비효율이 발생
    • 라운드 로빈 기법
      • CPU를 한 번 할당받아 사용할 수 있는 시간을 일정한 고정된 시간으로 제한하여 선입선출 기법의 비효율성을 해결할 수 있다.
    • 우선순위 스케줄링
      • 수행 대기중인 프로세스들에게 우선순위를 부여하고 우선순위가 높은 프로세스에게 CPU를 먼저 할당하게 하는 방식
      • 지나치게 오래 기다리는 프로세스가 발생하지 않도록 기다린 시간이 늘어날수록 우선순위를 높여주는 방안도 활용될 수 있다


메모리를 관리하는 방법

  • 메모리는 CPU가 직접 접근할 수 있는 컴퓨터 내부의 기억장치다. 메모리 관리를 위해 운영체제는 주소라는 개념을 사용한다. 또한 다수의 사용자 프로그램이 동시에 메모리에 올라간 경우 서로 다른 프로세스의 영역을 침범하지 않도록 보안을 유지하는 역활도 운영 체제의 몫이라고 할 수 있다.
  • 물리적 메모리를 관리하는 방식에는 고정 분할 방식, 가변 분할 방식, 가상 메모리 방식이 있다
    • 고정 분할 방식
      • 물리적 메모리를 몇 개의 영구적인 분할로 나눈다. 나뉜 각각의 분할에는 하나의 프로그램이 적재된다. 고정 분할 방식은 융통성이 없는 단점이 있다
      • 내부 단편화가 발생할 수 있다.
    • 가변 분할 방식
      • 매 시점 프로그램의 크기가 맞게 메모리를 분할해서 사용하는 방식을 말한다
      • 고정 분할 방식에서 발생하는 내부 단편화는 발생하지 않지만 외부 단편화가 발생할 수 있다
    • 가상 메모리 방식
      • 최근 거의 모든 컴퓨터 시스템에서 사용하는 메모리관리 기법
      • 가상 메모리 기법에서는 물리적 메모리보다 더 큰 프로그램이 실행되는 것을 지원한다. 이때 실행될 수 있는프로그램의 크기는 가상 메모리 크기에 의해 결정된다. 운영체제는 가상메모리의 주소를 물리적 메모리 주소로 매핑하는 기술을 이용해 프로그램을 물리적 메모리에 올리게 된다
      • 프로그램의 전체 크기가 1GB라 하더라도 전체가 항상 동시에 사용되는 것은 아니다. 그러므로 현재 사용되고 있는 부분만 메모리에 올리고, 나머지는 하드 디스크와 같은 보조 기억장치에 저장해 두었다가 필요할 때 적재하는 방식을 취한다. 이때 사용되는 보조 기억장치의 영역을 스왑 영역이라고 부른다. 프로그램을 구성하는 주소공간은 페이지라는 동일한 크기의 작은 단위로 나뉘어 물리적 메모리와 스왑 영역에 일부분씩 저장된다. 이렇게 동일한 단위로 메모리를 나누는 기법을 페이징 기법이라고 한다.


주변 장치 및 입출력 장치를 관리하는 기법

  • CPU나 메모리와 달리 인터럽트라는 메커니즘을 통해 관리한다. 주변 장치들은 CPU의 서비스가 필요한 경우에 신호를 발생시켜 서비스를 요청하게되는데 이 때 발생시키는 신호를 인터럽트라고 한다. CPU는 평소에 CPU 스케줄링에 따라 자신에게 주어진 작업을 수행하고 있다가 인터럽트가 발생하면 하던일을 잠시 멈추고 인터럽트에 의한 요청 서비스를 수행하게 된다.
  • 주변 장치들은 각 장치마다 그 장치에서 일어나는 업무에대한 관리를 위한 일종의 작은 CPU를 가진다. 이를 컨트롤러라고하는데 이컨트롤러를 바탕으로 무언가 입력이되면 CPU 에게 인터럽트를 발생시켜 보고하는 역할을 한다. 그러면 CPU는 하던일을 잠시 멈추고 인터럽트에 대한 처리를 하기 위해 운영체제로 할당이 넘어간다.

ref. 운영체제와 정보기술의 원리