본문 바로가기

CS/운영체제론

운영체제 공룡책 Ch1: Introduction

* 학교 전공수업, Operating System Concepts 서적, 기술 블로그 등을 통해 공부한 내용을 정리한 것

* 공부하면서 내용을 덧붙일 예정입니다.


목차

1. What Operation Systems Do: 운영체제가 하는 일

2. Computer-System Organization: 컴퓨터 시스템의 구성

3. Computer-System Architecture: 컴퓨터 시스템의 구조

4. Operating System Structure: 운영체제의 구조

5. Operating System Operations: 운영체제의 작동?

(추가 예정)

 


* 운영체제를 공부해야하는 이유

개발자가 작성하는 코드는 운영체제 위에서 실행되기 때문에, 운영체제에 대해 이해하고 그 작동방식에 대해 알아야

안전하고 효율적인 프로그래밍을 할 수 있다. 

따라서 직접 운영체제를 작성하는 프로그래머가 아니더라도, 운영체제 위에서 실행되는 프로그램을 작성하는 개발자라면 운영체제를 공부하고 컴퓨터 하드웨어 구동 방식 등에 대해 이해해야 한다.


1. What Operation Systems Do: 운영체제가 하는 일

운영체제란?

  • 컴퓨터 시스템이 동작할 때, 컴퓨팅 자원들을 잘 사용할 수 있는 방법을 제공해주는 프로그램
    (OS의 역할: 여러 요청들이 efficient & fair 하게 자원을 사용할 수 있도록 자원을 할당해줌)
  • 환경을 제공한다는 점에서, 정부의 역할과 유사!
  • user와 컴퓨터 하드웨어(CPU, 메모리, I/O 장치) 사이에서 중간 역할을 해주는 프로그램
  • 운영체제는 컴퓨터에서 항상 실행되는 프로그램이다. (일반적으로 커널이라고 함)
    -> 항상 ram에 상주하고 있는 프로그램이다.
  • 운영체제에는 항상 실행중인 커널, 미들웨어 프로임워크, 시스템 프로그램이 포함된다. 
  • OS는 control program 이다.

프로그램의 두 유형

  • 시스템 프로그램: 운영체제와 연관되어 있으나 커널의 일부분은 아닌 프로그램을 말함
  • 응용 프로그램: 시스템의 운영과 관계없는 모든 프로그램을 말함

 

미들웨어

  • 응용 개발자에게 추가 서비스를 제공하는 소프트웨어 프레임워크의 집합을 말함
  • 휴대용 운영체제는 종종 핵심 커널외에도 미들웨어를 함께 제공한다.
    (ex. iOS, 안드로이드 운영체제는 데이터베이스, 멀티미디어 및 그래픽스 미들웨어를 제공)

2. Computer-System Organization: 컴퓨터 시스템의 구성

범용 컴퓨터 시스템

  • 현대의 컴퓨터는 여러 개의 divice controller(장치 제어기: 특정 장치를 관리, 일부 컨트롤러는 여러 디바이스 관리 가능) + 한개 이상의 CPU로 구성되어있다.
    (이들은 공통 버스로 연결되어 있고, 공통 버스는 shared memory에 대한 접근을 제공한다.)
  • CPU와 device controller는 메모리 사이클을 얻기 위해 경쟁하며 concurrent excution(병렬 수행)된다.

그림 출처: Operating System: Concepts 9판

컴퓨터 부팅 과정(Computer Startup)

  • 컴퓨터 전원이 켜지거나 재부팅 시 bootstrap program을 로드한다.
  • 컴퓨터 전원을 키면, CPU로 신호가 전달된다.
  • CPU는 ROM이나 EEPROM 메모리에 접근해서 펌웨어라고도 불리는 초기화 프로그램(bootstrap program)을 찾는다.
  • 부트스트랩 프로그램은 시스템을 초기화 하고, (하드 디스크에 접근해서) 운영체제의 커널을 찾아 메모리에 적재한다.(부트 로더)
  • 운영체제(커널)의 entry point 부터 커널 수행이 시작되면, 시스템 & 사용자에게 서비스를 제공할 수 있다.

 

컴퓨터 시스템 연산(Operation)

  • 맨 처음 시작 프로세스(유닉스 기준으로 init 프로세스)가 시작된 뒤,
    시스템이 완전히 부트 되면 시스템은 event가 발생하기를 기다린다.
  • event 발생 시, 디바이스 컨트롤러는 인터럽트(interrupt) 를 통해 CPU에게 이벤트 발생을 알리는 신호를 보낸다.
  • 인터럽트 발생 시, 커널은 수행하던 작업을 멈추고 인터럽트를 처리한 뒤 다시 기존 작업을 처리한다.
  • 인터럽트는 HW, SW에 의해 발생 가능하다.
    • HW: 시스템 버스를 통해 CPU에 신호를 보내 인터럽트 발생시킴
    • SW: 시스템 콜이라는 특정한 명령을 실행함으로써 인터럽트 발생시킴
      (trap/exception - 에러/유저 요청에 의해 발생하는 인터럽트)

인터럽트 처리

  1. CPU가 인터럽트 신호를 받으면, CPU는 하던 작업을 잠시 중단한 뒤,
  2. 인터럽트 벡터 테이블에서 인터럽트를 유발한 장치에 대한 인터럽트 서비스 루틴의 시작 주소를 찾는다.
  3. 이후 인터럽트 서비스 루틴이 실행되고, 서비스 루틴이 인터럽트 핸들러를 호출한다.
  4. 인터럽트 서비스 루틴의 실행이 완료되면, CPU는 기존 작업(인터럽트 되었던 연산)을 마저 수행한다.
  • 이렇게 인터럽트 기반으로(interrupt driven 방식) 운영체제를 설계하지 않고 CPU가 이벤트를 계속 감시해서 처리를 수행하는 방식(Polling 방식)으로 운영체제를 설계하면 CPU 자원을 낭비하게 된다.
    따라서, 운영체제는 interrupt driven 방식이다!

I/O (입/출력)

  • I/O = device -> device controller의 local buffer
  • I/O device와 CPU는 동시에(concurrently) 실행될 수 있다.
  • device controller는 local buffer를 가지며, 주변 장치(device)와 지신의 로컬 버퍼 사이의 데이터 전송을 담당한다.
  • CPU는 메인 메모리와 로컬 버퍼 사이의 데이터 전송을 담당한다.
  • 각 device controller는 device driver를 가짐(driver는 device에 대한 일관된 인터페이스를 제공함!)
  • device controller: 로컬 버퍼 + 레지스터 집합을 가진다.
  • device controller는 인터럽트를 발생시킴으로써 CPU에 자신의 작업이 끝났음을 알린다.
  • 시스템 콜: OS와 사용자 프로그램을 매개하는 인터페이스.
    시스템 콜을 통해 OS에 I/O(ex. read(), write(), open(), close() 등)를 요청할 수 있다.

    * I/O 연산 예시: 키보드에서 한 문자를 읽어오기
    1. device controller가 다음 동작을 정하기 위해 레지스터(controll register)에서 명령어를 읽어온다.
      (읽은 명령어 = 키보드에서 입력한 한 문자 읽어오기)
    2. device controller가 device(키보드)로부터 읽어온 데이터를 자신의 로컬 버퍼로 보낸다.
    3. 전송이 끝나면 device controller가 device driver에게 인터럽트를 보낸다.
    4. device driver가 통제권을 OS에게 반환한다. (이 때 데이터/데이터에 대한 포인터 or 상태정보를 같이 반환할 수도 있다.)

 

직접 메모리 접근: DMA

  • device controller가 CPU의 개입 없이 메인 메모리 <-> 자신의 로컬 버퍼로 데이터 블록을 직접 전송하고
    전송이 끝날때마다 인터럽트를 발생시킴으로써, device controller가 작업을 수행하는 동안 CPU가 다른 작업을 수행할 수 있게 된다.
  • 한 바이트마다 인터럽트가 발생했던 예전 방식과 다르게, 데이터 블럭 하나 당 인터럽트 하나가 발생된다.
  • DMA를 통해 CPU 성능을 (매우) 올릴 수 있다.

(TODO..)

3. Computer-System Architecture: 컴퓨터 시스템 구조

 

Operating-System Structure

Operating-System Operations

Process Management

Memory Management

Storage Management

Protection and Security

Kernel Data Structures

Computing Environments

Open-Source Operating Systems

 

(최종 업데이트: 22.7.7 )