Operating System Concepts - Ch 1. Introduction

2022. 10. 23. 22:12Cs/운영체제

운영체제 수업을 들으며 정리한 Operating Sysem Concepts 10th Edition 내용입니다.

 

 

 

 

<학습 목표>

- 컴퓨터 시스템의 기본 구성과 인터럽트의 역할에 대해 이해한다.

- OS의 주요 성분에 대해 살펴본다.

- User mode에서 Kernel mode로의 전환에 대해 설명할 수 있다.

 

 

 

 

 


 

1-0. What Operating Systems Do

 

 

- 운영체제란 '사용자와 컴퓨터 하드웨어 사이에서 중재자 역할을 하는 프로그램'이다.

 

 

# 운영체제의 목표

- 사용자가 편리하고 효율적인 방식으로 프로그램을 실행할 수 있는 환경을 제공하는 것이다.

- 컴퓨터 하드웨어 자원을 관리하는 것이다. 

 

 

# User view

- ease of use(사용의 편리성)

- good preformance

- 자원 활용성(resource utilization)은 고려하지 않는다.

 

 

 

# System view

- resource allocator(자원 할당자)

: 자원 사용의 효율성(efficient)과 공정성(fair) 사이에서 결정한다.

 

- control program(제어 프로그램)

: error나 부적절한 컴퓨터 자원의 사용을 막기 위해 프로그램들의 실행을 제어한다.

 

 

 

 

# 운영체제 구성

- kernel

: 컴퓨터에서 항상 실행되는 프로그램

 

- middleware

: 개발자에게 도움이 되는 추가적인 서비스를 제공하는 소프트웨어 프레임워크의 집합

 

- system programs

: 시스템을 관리하는 프로그램

 

 

 

 

 

 


1-1. Computer System Structure

 

 

 

- 하드웨어(Hardware)

 

 

- 운영체제(Operating System)

: 하드웨어의 사용을 제어하고 조정함으로써 사용자가 사용하는 응용 프로그램과 하드웨어를 중재한다.

 

- 응용 프로그램(Application Programs)

 

 

- 사용자(Users)

 

 

 

 

 

 


2-0. Computer System Organization

그림에서 disk controller, USB controller, graphics adapter가 device controller이다.

 

 

- 하나 이상의 CPU와 장치 컨트롤러(device controller)는 공통버스(common bus)로 연결되어 메모리를 공유한다.

- CPU와 device controller는 같이 수행 가능하며, 메모리 사이클을 얻기 위해 경쟁한다.

 

 

 

 


2-1. Computer Operations

 

- I/O devices와 CPU는 동시에 실행가능하다.

- 각 decive contoller의 device driver는 I/O를 관리한다.

- 각 device controller는 local buffer를 가진다.

-I/O는 device에서 controller의 local buffer로 움직인다.

- CPU는 데이터를 메인메모리에서 local buffer로, 혹은 그 반대로 전달한다.

- device controller는 연산이 끝났음을 인터럽트를 발생시킴으로써 CPU에 알린다.

 

 

 

 


2-2. Basic Interrupt Handling

 

- device controller가 interrupt-request line에 신호를 보낸다.

- CPU는 명령어 하나가 끝날 때마다 interrupt-request line에 인터럽트 신호가 들어왔는지 체크한다.

- CPU가 인터럽트를 탐지하면, 인터럽트 번호를 읽어 interrupt vector를 통해 interrupt-handler routine으로 점프하여 해당 일을 수행한다. (*interrupt vector에서 인터럽트 처리 방법(service routine)이 들어있는 memory address를 알아낼 수 있다)

- interrupt-hadler는 인터럽트된 명령어의 주소(register, PC)를 저장한다(다시 복귀해야 하므로).

  그리고, 인터럽트의 원인을 알아내 필요한 작업을 수행하고, 다시 중단지점으로 복귀해 원래 하던 작업을 재실행한다.

 

 

# Interrupt Timeline

 

 

# Interrupt- Driven I/O Cycle

 

 

 


2-3. Modern Interrupt Handling

 

# Two interrupt request lines

- Nonmaskable(더 중요한) interrupt

: 복구 불가능한 메모리 에러를 막기위한 event가 저장되어 있는 인터럽트

 

- Maskable(모른척 미룰 수 있는, 덜 중요한) interrupt

: 인터럽트 되지 말아야 할 중요한 instructions의 실행 전에 꺼 놓을 수 있는 인터럽트

 

 

 

# 인터럽트 우선순위(Interrupt priority levels)

- CPU는 낮은 우선 순위의 인터럽트를 지연시킬 수 있다.

- 높은 우선 순위의 인터럽트는 낮은 우선 순위의 인터럽트의 실행을 뺏을 수 있다(선점가능).

 

 

 

 

 


2-4. Storage Structure

 

- Main memory(RAM: Random Access Memory)

: CPU는 명령어를 단지 Main memory에서만 가져올 수 있다. 즉, 메인 메모리는 CPU가 직접 접근할 수 있는 유일한 대규모 저장장치이다. 따라서 모든 프로그램은 메인 메모리에 올라가야 실행된다.

메인 메모리는 전원이 공급되지 않으면, 내용을 사라지는 휘발성(volatile) 메모리이다. 

 

- Bootstrap program

: OS를 로드하기 위해 사용된다. 정적 프로그램이기에, 빈번하게 writtern되지 않으며 비휘발성 메모리인 EPROM(Electrically Erasable Programmable Read-Only Memory)이나 펌웨어(firmware)에 저장되어 있다.

 

- Secondary Storage(보조기억장치)

: 비휘발성(nonvolatile)의 대규모 저장 용량을 제공하는 메인 메모리의 확장 저장소이다. 즉, 대량의 데이터를 영구히 보존할 수 있다.

 

- Teritary storage

: 백업 복사본들을 저장하기 위해 사용한다.

    Ex) CD-ROM, magnetic tapes

 

 

 

 

# Storage-Device Hierarchy(계층구조)

 

registers와 cache는 CPU 내에 존재한다. 이 중, cache는 Main memory에서 자주 쓰는 것들을 잠깐 보관하는 곳이라 할 수 있다,

 

- 속도가 빠를 수록 용량이 작고 비용이 크다.

- 반면, 속도가 느린 저장장치는 용량이 크며, 비용이 작다.

 

 

 

 

 

 


2-5. I/O Structure

 

- interupt-driven I/O는 작은 데이터 전송시에는 문제가 없지만, NVS I/O와 같이 대량의 데이터를 전송해야 할 때에는 높은 overhead를 생성한다.

 

 

 

# Direct Memory Access(DMA, 직접 메모리 접근)

- 메모리에 근접하는 속도로 정보를 전송하기 위해 사용된다.

- device controller는 CPU의 개입없이,  데이터 블록 전체를 버퍼에서 메인 메모리로 직접 전송한다.

- 한 바이트마다 인터럽트가 발생하는 것이 아니라, 한 블록마다 인터럽트가 발생한다. 따라서, 인터럽트가 훨씬 덜 발생하게 될 뿐만 아니라,  DMA가 일어나는 동안 CPU는 다른 작업을 할 수 있어 성능이 향상된다.

 

 

 

 


3-0. Computer-System Architecture

 

# 단일 -처리기 시스템(Single-Processor Systems)

- 단일 코어를 사용하는 시스템이다. 즉, 하나의 CPU에서 한 개의 process만 처리가 가능한 시스템이다.

 

 

# 다중 -처리기 시스템(MultiProcessor Systems)

- 한 개의 코어를 갖는 CPU에서 두 개 이상의 processor를 탑재한 시스템이다.

- 다중 처리 시스템의 주요 장점은 처리량(throughput)이 늘어난다는 것이다.

- 하지만, N개의 processor를 탑재한다고 해서 N만큼 속도가 빨라지진 않는다(overhead와 메모리 경쟁때문에).

 

 

# MultiProcessor System의 종류

1. Symmetric Multiprocessing(SMP)

2. Multicore System

3. Non-uniform Memory Access(NUMA)

 

 

 

 

 

 


3-1. MultiProcessor Systems

 

# Symmetric Multiprocessing(SMP)

- 대칭적 다중처리 방식.

- 대부분의 멀티 프로세서 시스템이 SMP 구조를 사용한다.

- 각 CPU 프로세서는 OS 함수들이나 사용자 프로세스를 포함하는 모든 작업을 수행한다.

- 각 프로세서는 고유 레지스터와 local cache를 가지지만, 물리 메모리(메인 메모리)는 서로 공유한다.

 

(+) 많은 프로세스들이 동시에 실행될 수 있다(N개의 CPU가 존재하면, N개의 프로세스 동시 실행 가능).

 

(-) 어떤 것은 놀고 있을 때, 어떤 것은 overhead될 수 있다.

 

 

 

 

 

# Multicore System

 

- 하나의 프로세서 칩에 여러 개의 코어가 있다.

 

(+) 칩 내의 통신이 칩 사이의 통신보다 빠르기 때문에 하나의 코어에 여러개의 칩이 있는 것보다 효율적이다.

(+) 복수의 단일 코어 칩보다 전력 소모가 적다.

 

Ex) Windows, Mac OS, Linux, Android, iOS가 멀티코어 SMP 시스템을 지원한다.

 

 

 

 

# Non-uniform Memory Access(NUMA)

 

- 각 CPU는 빠른 고유 버스에 의해 접근할 수 있는 고유 메모리를 가진다.

- CPU는 공유 시스템 상호 연결에 의해 연결되어져 있다.

 

(+) 고유 메모리에 접근하는 것이 더 빠르고 경쟁도 없다.

(+) 더 많은 프로세서가 추가될수록 더 효과적으로 확장된다.

 

(-) 시스템 상호 연결을 통해 떨어진 메모리에 접근하는데 지연이 있을 수 있다.

 

 

 

 

# Clustered Systems

- 두 개 이상의 독자적 시스템(노드들)을 함께 연결한다. 

- storage-area-network(SAN)을 통해 저장소를 공유한다.

 

(+) 고장에 대한 고가용(high-availability) 서비스를 제공한다.

 

- 비대칭형 클러스터링(Asymmetric clustering)에서는 다른 컴퓨터들이 응용 프로그램을 실행하는 동안 한 컴퓨터는 hot-standby mode(대기상태)를 유지한다(문제가 생기면 대체하기 위해).

- 대칭형 클러스터링(Symmetric clustering)에서는 복수의 노드들이 응용 프로그램을 실행하고, 서로를 감시한다.

- 어떤 클러스터들은 동작의 충돌을 피하기 위해 distributed lock manager(DLM)을 갖는다.

Ex) HPC(high-performance computing)

 

 

 

 

 

 

 

 

 


4-0. Operating System Operations

 

- bootstrap 프로그램은 부팅 시에 OS kernel을 메모리에 올려 시스템을 시작한다.

- kernel은 서비스를 시작하고 system daemons는 커널 밖에서 시작한다.

- 만약 실행할 프로세스가 없다면, 서비스할 I/O 장치가 없다면, 반응할 사용자가 없다면..

    => OS는 이벤트(인터럽트 발생)를 기다린다. interrupt-driven 방식이기 때문

 

 

- Hardware interrupt

 

- Software interrupt(exception 혹은 trap)

: software error, user request for OS service(system call), other process problems include infinite loop, processes modifying each other or the OS.

 

 

 

 

 

 


4-1. Multiprogramming

 

 

- 단일 사용자가 CPU 혹은  I/O 장치를 항상 바쁘게 유지할 수 없다.

- 멀티프로그래밍은 CPU가 항상 하나의 작업을 하도록 구성하여, CPU 이용률(CPU utilization)을 증가시킨다.

- OS는 메모리에서 여러 프로세스가 동시에 실행되도록 한다(여러 프로세스를 동시에 메모리에 올린다).
   (*Process란 실행 중인 프로그램, 메모리에 올라가져 있는 프로그램을 말한다.)

- OS는 하나의 프로세스를 선택하여 실행을 시작한다.

- 프로세스가 대기해야 할 때(예를 들어 I/O), OS는 다른 프로세스로 바꾸어 작업한다.

- 즉, CPU가 쉬지 않고 일하도록 하는 것이다.

 

 

 

 

 


4-2. Multitasking

 

- 멀티태스킹이란 멀티프로그래밍의 논리적 연장이다.

- 운영체제는 사용자에게 더 빠른 응답시간을 주기 위해(자신의 프로그램과 계속 상호작용할 수 있도록), CPU에 빈번하게 프로세스들을 전환(switching)해 줌으로써 다수의 프로세스들을 실행한다.

- 만약 여러 프로세스들이 같은 시간에 실행할 준비를 마쳤다면(여러 작업이 동시에 요청이 오면), CPU scheduling을 통해 어떤 프로세스를 실행할 것인지 결정해야 한다.

- 가상 메모리(Virtual memory)는 메모리에서 프로세스의 실행이 완전히 일어나지 않도록 해준다. 즉, 실제 메모리를 초과하는 프로세스들의 실행이 가능하다. 

 

 

 

 

 

 

 


4-3. Dual-Mode and Multimode Operation

 

 

 

- Dual mode(이중모드)는 OS가 자기 자신과 다른 시스템 components를 보호할 수 있도록 해준다.

- User mode와 Kernel Mode를 정의해 사용한다.

- 두 모드는 하드웨어에서 제공하는 Mode bit로 구분한다(kernel(0) or User(1))

 

 

# Mode bit

- kernel 코드와 user 코드의 실행을 구분할 수 있도록 해준다.

- System call은 인터럽트처럼 커널모드로 전환하게 하여, request를 실행하게 한다.

- 일부 명령을 특권 명령으로 지정하여, 커널 모드에서만 실행가능하도록 한다.

 

 

 

 

 


4-4. Timer

 

- timer는 한 프로세스가 자원을 독전하는 것과 무한루프에 빠지는 것을 방지한다.

- 타이머는 특정 시점이 지나면 컴퓨터를 인터럽트하도록 설정한다.

- OS는 카운터를 설정할 수 있다(privileged instruction)

- 카운터가 0에 도달하면, 인터럽트를 발생시킨다.

- 만약 타이머가 인터럽트되면, OS에 자동적으로 제어권이 넘어간다.

 

 

 

 

 


5-0. Resource Management

 

 

 

# Process Management

- process는 실행 중인 프로그램으로, system의 동작 단위이다.

- program은 수동적 객체(passive entity),  process는 능동적 객체(active entity)

 

- 프로세스는 작업을 수행하기 위해 자원(cpu time, 메모리, 입출력 장치, 파일, 초기 데이터)을 필요로 한다.

 

- 프로세스 종료시에 재사용 가능한 자원을 회수해야 한다.

- single-threaded process는 하나의 PC(실행할 다음 명령어의 위치 가리킴)를 가진다.

- Multithreaded process는 thread별로 한 개의 PC를 가진다.

- 시스템은 여러 process로 구성되는데, 몇 개는 OS process, 나머지는 User process이다.

 

 

 

<Activities>

- user와 system 프로세스를 만들고 삭제한다.

- CPU에서 프로세스와 스레드를 scheduling한다.

- 프로세스를  중단 및 재개한다.

- 프로세스 동기화 매커니즘을 제공한다.

- 프로세스 소통을 위한 매커니즘을 제공한다.

 

 

 

 

 

# Memory Management

- 프로그램 실행을 위해 모든 명령어들은 메모리에 존재해야 한다.

- 프로그램에 필요한 모든 혹은 일부 데이터는 메모리에 존재해야 한다.

- 메모리 관리는 메모리에 무엇이 언제 있는지 결정한다(CPU 이용률과 컴퓨터 응답 속도를 개선하기 위해).

 

 

 

<Activities>

- 메모리의 어느 부분이 현재 사용되고 있으며, 어떤 process가 그것을 사용하고 있는지 추적한다.

- 어떤 프로세스들과 데이터를 메모리에 적재하고 제거할 것인지 결정한다.

- 메모리 공간을 필요에 따라 할당하고 회수한다.

 

 

 

 

# File-System Management

- OS는 정보 저장의 통일되고 논리적인 관점을 제공한다. 

- 물리적 속성들을 논리적 저장 단위(file)로 추상화한다.

- 파일들은 디렉토리로 조직화되어 있다. 

 

 

<Activities>

- 파일과 디렉토리를 만들고 삭제한다.

- 파일들을 대용량 저장 장치에 매핑시킨다.

- 비휘발성의 저장장치에 파일들을 백업한다.

 

 

 

 

 

# Mass-Storage Management

- 프로그램과 데이터를 저장하는 주요 온라인 저장장치로 HDDs와 NVM 장치가 사용된다.

- 적절한 관리가 중요하다.

- 컴퓨터 연산의 전체적인 속도는 디스크 서브시스템과 그것의 알고리즘의 영향을 받는다.

 

 

<Activities>

- Mounting and unmounting

- Disk scheduling

- Free-space management

- Partitioning

- Storage allocation(기억 장치 할당)

- Protection

 

 

 

 

 

 

 

# Cache Management

- Caching은 정보를 더 빠른 저장소로 Cache로 복사하는 것이다.

 : 메인 메모리는 캐시를 보조 기억 장치로 바라본다. 

- 사용 중인 정보가 느린 저장소에서 더 빠른 저장소로 일시적으로 복사된다.

- 정보가 필요한 경우, 더 빠른 저장소(캐시)부터 확인된다.  

- 만약, 캐시에 정보가 들어있다면, 캐시로부터 정보를 직접 받아 사용된다.

- 만약, 캐시에 정보가 들어있지 않다면, 해당 데이터를 캐시로 복사해 와 사용한다.

- 캐시는 크기에 한계가 있어, 캐시 관리가 설계 문제에 중요하다.

 

 

 

 

# I/O Systems Management

- OS의 또 다른 목적 중 하나는 하드웨어의 세부사항을 사용자로부터 숨기는 것이다. 

 

- 입출력 시스템의 구성 요소

   1. Buffering, Caching, Spooling을 포함

   4. 일반적인 장치 드라이버 인터페이스

   5. 특정 하드웨어 장치들을 위한 드라이버


5-1. Migration of data "A" from Disk to Register

 

 

- 멀티태스킹 환경에서는 가장 최근의 값이 저장 계층의 어느 곳에 저장되어있든지 상관없이, 사용하는 데 주의해야한다. 

- 멀티프로세서 환경에서는 캐시 일관성(cache coherency)이 제공되어야

한다.