💡 컴퓨터 시스템 구조 2

📌 순서

  1. CPU 스케줄링
  2. 타이머(Timer)
  3. 디바이스 컨트롤러(Device controller)
  4. 동기식 입출력 vs 비동기식 입출력
  5. DMA(Direct Memory Access) controller
  6. 프로그램의 실행

🌟 CPU 스케줄링

CPU 스케줄링은 다중 프로세스에 CPU를 할당하기 위한 기술이다. 하나의 CPU를 모든 프로세스가 효율적으로 활용하게 하기 위해 사용한다. 다양한 방식이 존재하며, 특정한 환경에 따라 적합한 CPU 스케줄링 알고리즘이 적용된다.

1. CPU 스케줄링 종류

선점형 스케줄링✔️

CPU를 할당받아 실행 중인 프로세스가 있더라도, 우선순위가 높은 프로세스가 도착한다면 실행을 중단하고 다른 프로세스에게 CPU를 할당하는 방식이다. 비교적 응답 속도가 빠르고, 운선순위 처리가 필요한 경우 유용하다.

🧨 문제점

공유 데이터의 일관성 유지 문제가 있을 수 있다. 선점형 스케줄링 방식에서 프로세스는 데이터를 변경하는 도중 CPU를 반납할 수 있다. 다수의 프로세스가 데이터를 공유할 때 데이터가 변경되게 되면 일관성이 유지되지 않을 수 있다.

👀 해결방안

동기화를 위한 자료구조를 통해 데이터를 동기화한다.

비선점형 스케줄링✔️

현재 실행 중인 프로세스가 완료되거나 프로그램이 CPU를 자진 반납해야만 다음 프로세스에 CPU를 할당할 수 있다. 일반적으로 적은 오버헤드를 갖는다.

🧨 문제점

지연시간이 발생하거나 CPU 활용도가 떨어질 수 있다.

라운드 로빈(Round Robin:RR)✔️

선점형 스케줄링 방식중 하나로, 프로세스가 할당된 시간 내에 처리를 완료하지 못하면 해당 프로세스는 준비 큐 리스트가장 뒤로 보내지고, CPU는 대기 중인 다른 프로세스로 넘어간다.

👉🏻 균등한 CPU 점유 시간을 보장하며, 시분할 시스템을 사용한다.


🌟 타이머(Timer)

일정 시간이 흐르면 타이머가 인터럽트를 걸어 운영체제에게 CPU의 제어권이 넘어가도록 한다.

👉🏻 타이머는 매 클럭 틱마다 1씩 감소한다.
👉🏻 타이머 값이 0이 되면 타이머 인터럽트가 발생한다.
👉🏻 CPU를 특정 프로그램이 독점하는 것으로부터 보호한다.
👉🏻 Time sharing을 구현하기 위해 널리 이용한다.
👉🏻 현재 시간을 계산하기 위해서도 사용한다.


🌟 디바이스 컨트롤러(Device controller)

디바이스 컨트롤러는 해당 I/O 장치 유형을 관리하는 일종의 작은 CPU이다.
👉🏻 제어 정보를 위해 Control register, Status register를 가진다.
👉🏻 일종의 Data register로, Local buffer를 가진다.
👉🏻 입출력은 실제 디바이스와 로컬 버퍼 사이에서 일어난다.
👉🏻 디바이스 컨트롤러는 I/O가 끝났을 경우, 인터럽트로 CPU에 그 사실을 알린다.

Device driver✔️

👉🏻 장치구동기(Device driver)
👉🏻 OS 코드 중 각 장치 별 처리 루틴 (Software)

Device controller✔️

👉🏻 장치제어기(Device controller)
👉🏻 각 장치를 통제하는 일종의 작은 CPU (Hardware)


🌟 동기식 입출력 vs 비동기식 입출력

1. 동기식 입출력(Synchronous I/O)

I/O 요청 후 입출력 작업이 완료된 후에나 제어가 사용자 프로그램에 넘어간다.

구현 방법 1

👉🏻 입출력이 끝날 때까지 CPU를 낭비시킨다.
👉🏻 매 시점 하나의 입출력만 일어날 수 있다.

구현 방법 2

👉🏻 입출력이 완료될 때가지 해당 프로그램에게서 CPU를 빼앗는다.
👉🏻 해당 프로그램은 입출력 처리 대기 큐로 보내진다.
👉🏻 다른 프로그램에게 CPU 제어권을 넘긴다.

2. 비동기식 입출력(Asynchronous I/O)

I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감

두 경우 모두 입출력의 완료는 인터럽트로 알린다.


🌟 DMA(Direct Memory Access) controller

👉🏻 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용한다.
👉🏻 CPU의 중재 없이 Device controller가 디바이스의 Buffer storage의 내용을 메모리에 Block 단위로 직접 전송한다.
👉🏻 Byte 단위가 아니라 Block 단위인터럽트를 발생시킨다.


🌟 프로그램의 실행(메모리 load)


프로그램은 File System에 File 형태로 저장되어 있다가 프로그램을 실행시키면 메모리에 올라가며 프로세스가 된다.

그 중간에 Virtual memory 단계가 있다.

1. Virtual Memory

프로그램의 독자적인 주소 공간으로, 실제로 존재하는 것이 아닌 가상의 주소 공간이다.

당장 필요한 부분은 물리적인 메모리(Physical memory)에 올라가며, 그렇지 않은 부분은 Swap area에 들어간다.

물리적 주소와 다르기 때문에 주소 변환(Address translation)이 필요하다.

프로세스 주소 공간의 구성✔️

코드
👉🏻 실행파일에 있던 코드가 올라오는 공간이다.
👉🏻 기계어가 위치하는 공간이다.


데이터
👉🏻 데이터가 저장되는 공간.
👉🏻 전역 변수나 배열 등 데이터가 저장된다.


스택
👉🏻 함수를 차곡차곡 쌓아뒀다가 실행이 끝나면 내보내는 FILO방식이다.
👉🏻 지역 변수는 스택에 저장된다.

커널(운영체제) 주소 공간의 구성✔️

코드(커널 코드)

👉🏻 시스템콜, 인터럽트 처리 코드
👉🏻 자원 관리를 위한 코드
👉🏻 편리한 서비스 제공을 위한 코드


데이터

👉🏻 운영체제 데이터 영역에는 모든 하드웨어들을 관리하기 위한 자료구조를 가지고 있다.
👉🏻 모든 프로세스들을 관리하기 위한 자료구조를 가지고 있다: PCB(Process Control Block)


스택

  1. 각각의 프로그램에 의해 운영체제가 호출이 되기 때문에 지금 누구의 서비스를 수행하기 위해 운영체제 코드가 실행되는가에 따라 각 프로세스마다 커널 스택을 사용하고 있다.
  2. 커널 함수에 관한 스택. 다만 누구 때문에 호출되었는지에 따라 별도의 스택을 쓴다.

사용자 프로그램이 사용하는 함수✔️

함수(function)

사용자 정의 함수
👉🏻 자신의 프로그램에서 정의한 함수이다.

라이브러리 함수
👉🏻 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수이다.
👉🏻 자신의 프로그램의 실행파일에 포함되어 있다.

커널 함수
👉🏻 운영체제 프로그램의 함수
👉🏻 커널함수의 호출 = 시스템 콜

2. 프로그램의 실행

유저모드에서 프로세스의 사용자 정의 함수나 라이브러리 함수를 실행하다가 시스템 콜을 하면 커널 모드로 전환이 되어 커널의 주소공간에 위치한 커널 함수를 실행한다.

📖 교재 및 출처

  • A. Silberschatz et al., Operating System Concepts, 9th Edition, John Wiley & Sons, Inc. 2013.
  • A. Silberschatz et al., Operating System Principles, Wiley Asia Student Edition
  • 반효경님, 운영체제와 정보기술의 원리
profile
배움 기록

0개의 댓글

Powered by GraphCDN, the GraphQL CDN