2022. 10. 23. 22:12ㆍCs/운영체제
운영체제 수업을 들으며 정리한 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

- 하나 이상의 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(계층구조)

- 속도가 빠를 수록 용량이 작고 비용이 크다.
- 반면, 속도가 느린 저장장치는 용량이 크며, 비용이 작다.
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)이 제공되어야
한다.