User
Application Programs
: 응용프로그램Operating System
HW
(CPU, memory, I/O devices, ...)Network
: 최근에는 network가 필수적이라, 컴퓨터 구성요소로 포함할 수도 있다.OS는 User와 HW 사이의 매개체 역할을 한다고 했다.
따라서 운영체제의 목적은 다음과 같다.
Laptop 또는 Desktop
이러한 시스템은 한 사용자가 자원을 독점하도록 설계되었으며, 목표는 사용자가 수행하는 작업을 최대화하는 것이다.
이러한 경우 OS는 Ease of Use(사용의 용이성)
, Good Performance(좋은 성능)
에
더욱 신경 쓰며 Resource Utilization(자원의 이용)
에는 신경을 쓰지 않는다.
Shared Computer
이러한 시스템은 모든 사용자가 사용에 불편함이 없도록 해야 한다.
이러한 경우 OS는 Resource Allocator
, Control Program
으로써
User Programs와 HW의 사용을 효율적으로 관리한다.
Mobile Computer
이러한 경우 OS는 Usability
와 Battery Life
에 최적화하도록 해야 한다.
Embedded Computer
이러한 시스템은 User Interface가 있을 수도 있고 없을 수도 있다.
(ex. 자동차의 숫자 표시등은 User Interface없이 작동한다)
OS가 있다고 해서 모든 것이 I/O가 있는 것이 아니다.
동작은 있지만 User Interface가 없을 수도 있다.
따라서 다양한 사용자 환경에 따라서 최고의 효율을 만족시키도록 해야 한다.
Resource Allocator(자원 할당자)
로 볼 수 있다.Control Program(제어 프로그램)
이다.항상 실행되는 프로그램(Kernel)
이다.Device Controller
: Device Driver
: 운영체제에는 각 Device Controller마다 Device Driver가 있다.CPU는 프로그램이나 데이터를 Main memory에서 읽거나 쓸 때, Bus를 사용한다.
Device Controller는 외부 Device와 통신하기 위해, Bus를 사용한다.
CPU와 Device Controller는 둘 다 Parellel하게 실행되어,
Main memory에 하나 밖에 없는 Bus를 두고 경쟁한다.
➡️ 이를 해결하기 위해Interrupt
가 존재
interrupt
: HW(실제 물리적으로 존재하는 장치로부터 신호 : clock, 디스크 쓰기 완료, 패킷 도착 등)적인 event를 운영체제에게 알리는 일이다.
(Main memory의 Bus를 사용하기 위해 운영체제에게 제어권을 요청)
interrupt 기본 메커니즘 :
interrupt 처리 방식은 Polling 방식
과 Vector Interrupt System 방식
으로 나뉜다.
Polling 방식
: CPU가 주기적으로 Device나 입출력 buffer를 확인하여 interrupt가 발생했는지 여부를 체크하는 방식.
CPU가 계속해서 polling을 반복하므로, 자원 낭비가 크고, interrupt 지연 시간도 길어짐.
Vector Interrupt System 방식
: interrupt 발생시, interrupt controller가 interrupt vector라는 특별한 메모리 위치에 ISR 주소를 저장하여 CPU에 전달한다.
CPU는 이 ISR 주소를 참조하여 해당 ISR을 실행한다.
이 방식은 Polling 방식에 비해 자원 낭비가 적고, interrupt 지연 시간도 짧아지므로
빠른 interrupt 처리가 가능하다.
따라서 vector interrupt system 방식이 더욱 효율적인 interrupt 처리 방식이다
IO는 idle 상태에 있다가 있다가 event가 들어와서 CPU에 던지면,
IO가 해달라고 하는 것을 CPU가 바로 진행하지 못함.
하던거 정리하고 와야함(stack에 저장하는 과정) → 잠깐 delay 발생
interrupt가 들어왔을 때, 들어온 것을 기다리고 있는 것을 pending
이라고 한다.
➡️ A가 진행되고 있는 중에 B가 interrupt걸렸다.
B가 기다려야 하는 상황이면 B가 pending되었다.
Trap
: SW적 event(명령어나 데이터 오류, system call)를 운영체제에게 알리는 일이다.Interrupt(인터럽트)
간단히 하면,
Interrupt는 HW에서 발생하는 event(HW Device 오류, 입출력 요청 등)를 운영체제에 알리는 것.
Trap(트랩)
간단히 하면,
Trap은 CPU가 실행 중인 process에서 발생하는 SW적 event를 운영체제에 알리는 것.
➡️ CPU에서 어떠한 process가 실행 중인데, 그 process에서 'Division by Zero', '유효하지 않은 메모리 접근', 'Overflow', 'System call' 등등 SW에서 발생하는 event를 운영체제에게 알리는 것.
System Call(시스템 콜)
간단히 하면,
System Call은 programmer가 program에 코드를 작성함으로써 운영체제에서 제공하는 서비스를 호출하는 것.
System Call은 Trap을 발생시키는 종류 중 하나이다.
API(Application Programming Interface)
Cache
: CPU와 주기억장치(RAM) 사이에 위치한 속도가 빠른 메모리이다.
CPU가 주기억장치로부터 데이터를 가져올 때,
이전에 사용한 데이터가 Cache에 이미 저장되어 있다면
Cache 메모리에서 데이터를 가져와 사용한다.
이렇게 함으로써 CPU가 데이터를 더 빠르게 접근할 수 있게 되어 시스템 성능을 향상시킬 수 있다.
main memory
:
CPU는 memory에서만 명령을 적재할 수 있으므로 실행하려면
프로그램을 먼저 memory에 적재해야 한다.
범용 컴퓨터는 프로그램 대부분을
Main memory(DRAM)이라 불리는 재기록 가능한 메모리에서 가져온다.
Secondary Storage(보조기억장치)
: 대부분의 컴퓨터 시스템은 main memory의 확장으로 보조기억장치를 제공한다.
Storage Hierachy
일반적으로 메모리는 Byte 단위로 처리한다.
이때 메모리의 각 Byte는 고유한 주소를 갖는다.
HDD를 main memory로 쓸 수 없는 이유
➡️ HDD의 data는 물리적인 디스크 표면에 저장되어 있기 때문에
디스크에서 읽고 쓰는 동작이 필요하여 메모리처럼 Byte 단위로 직접 접근할 수 없다.
그래서 HDD는 데이터를 읽고 쓰는 과정에서 시간이 더 소모되기 때문에 main memory보다 느리다.
데이터 기록, 판독 원리
main motor == spindle
: 보통 1분에 72000번 동심원 방식으로 회전한다. (72,000 RPM)sub motor == arm assembly
: sub motor는 제자리에서 arm과 head를 원하는 track까지 옮겨 놓는다. ➡️ 지연 시간 발생head
: head의 끝 부분에 자석이 있다. 자기장을 이용하여 data를 읽고 쓴다.arm
: arm의 맨 끝에 head가 있다. arm은 sub motor에 의해 움직인다.track
: 하나의 platter 위에 spindle을 기준으로 반지름이 같은 구역이 있는데, 그것을 track이라 한다.sector
: head가 data를 어느 순간 딱 읽어들이는데, 읽어들이는 물리적인 최소의 size를 sector라고 한다. (보통 500bytes ~ 1kbytes) 읽음cluster
: sector들을 묶어서 최소 단위로 쓰는 경우를 cluster라고 한다.cylinder
: 같은 위치에 있는 sector들을 cylinder라고 한다.평균 지연 시간
:컴퓨터를 고장내는 가장 좋은 방법 : HDD를 툭툭 친다.
head와 platter가 물리적으로 아주 미세한 거리만큼 떨어져 있는데,
물리적 힘을 가함으로써 head가 sector를 긁게 한다.
마침 OS가 있는 곳에 bad sector가 나면, 컴퓨터를 제대로 고장낼 수 있다.
문제상황
: head에서 sector를 읽고, 처리하고, 전송하고, bufffer 비우는 과정을 수행하는데,
Motor가 빨리 돌기 때문에 미처 다 처리하지 못한 채
다음으로 읽어야 할 sector가 돌아올 수 있다.
인터리브
: 인터리브는 위의 문제 상황을 해결할 수 있다.
만약 sector가 돌아오는 속도와 이전 sector에서 data 처리하는 속도가 같다면
1 : 1 방식을 쓴다.
만약 sector가 돌아오는 속도보다 이전 sector에서 data 처리하는 속도가 느리다면
1 : 2 방식을 쓴다.
1 : 2 방식은 sector 1을 읽고 바로 다음 sector를 2로 하지 않고, 3으로 한다.
1 : 2 방식으로도 sector가 돌아오는 속도보다 data 처리하는 속도가 느리다면
1 : 3 방식을 쓴다.
1 : 3 방식은 sector 1을 읽고 바로 다음 sector를 2, 3로 하지 않고, 4으로 한다.
더 좋은 방식은 없다.
현재 상황에 맞는 인터리브 방식을 선택하여 데이터 전송 속도 높일 수 있게 한다.
NAS(Network-Attached Storage)
: NAS는 Network를 통해 다양한 디바이스에서 파일 공유를 가능하게 해주는 저장장치.
NAS 기기에서 여러 개의 HDD를 구성하여 RAID를 사용할 수도 있다.
RAID(Redundant Array of Inexpensive)
: RAID는 여러 개의 HDD를 하나의 논리적인 단위로 묶어서 하나의 논리적 디스크로 인식시키는 기술.
우리가 쓰고 있는 모든 컴퓨터는 폰 노이만 구조
시스템이다.
➡️ memory에 instruction과 data를 나누지 않는다.
앞서 공부한 Interrupt 구동 I/O의 형태는 소량의 데이터를 이동하는 데는 좋지만,
NVS(보조기억장치) I/O와 같은 대량 데이터 이동에 사용될 때 높은 overhead를 유발함
.
➡️ 이 문제를 해결
하기 위해 DMA(Direct Memory Access)
가 사용된다.
DMA는 I/O Device와 memory 사이에 직접 데이터 전송을 수행하는 장치이다.
DMA
Cycle Stealing
Cycle Stealing
SMP
를 사용한다.SMP의 장점은 여러 개의 프로세서가 하나의 메모리 공간을 공유하므로 각 프로세서는 다른 프로세서에서 처리한 데이터에 직접 접근하여 병렬처리가 가능하다는 것이다.
하지만 여러 프로세서가 하나의 Main memory를 공유하므로 병목 현상의 문제가 발생할 수 있다.
그래서 각 CPU에게 local bus를 통해 access되는 자체 local memory를 제공하는 것이다.
장점
은 CPU가 local memory에 access할 때 빠를
뿐만 아니라병목 현상도 없다
는 것이다. NUMA system의 단점
은 CPU가 상호 연결을 통해 원격 memory에 access
해야 할 때, 지연 시간이 증가
하여 성능 저하가 발생할 수 있다는 것이다.Multi-Processor System
의 정의는 시간이 지남에 따라 발전해 왔으며Multi-Core System을 포함
한다.Multi-Core System은 단일 코어를 가지는 Multi 칩보다 효율적일 수 있다.
높은 가용성(Availability)
을 제공하기 위해 사용된다.즉, Cluster 내의 하나 이상의 Computer가 고장나더라도 서비스는 계속 제공된다.
asymmetric clustering
: 다른 Computer들이 응용 프로그램을 실행하는 동안 한 컴퓨터는 hot-standby mode(긴급대기모드) 상태를 유지한다.symmetric clustering
: 둘 이상의 host들이 응용 프로그램을 실행하고 서로를 감시한다. 가용한 HW를 모두 사용하기 때문에 Symmetric Clustering 구성이 더욱 효율적이다. SAN
(Storage-Area Network)에 의해 가능해졌다.Bootstrap Program
:
컴퓨터를 실행시키기 위한 초기 프로그램.
운영체제 kernel을 찾아 memory에 load하는 단순한 코드.
kernel이 load
된다.
system daemon이 시작
된다.
(system daemon은 운영 체제에서 백그라운드에서 실행되는 프로그램으로, 여러 가지 서비스를 제공한다)
위 과정이 완료되면, 시스템이 완전히 부팅되고 어떤 event가 발생할 때까지 기다린다.
MultiProgramming(Batch System)
은 여러 개의 프로세스를 동시에 메모리에 올리고,Batch System
과 유사하다. 실행 중인 program
을 Process==Job==Task
라고 한다.MultiTasking(==Time Sharing) System
:User에게 빠른 Response Time을 제공
한다.마치 동시에 처리되는 것처럼
보이게 한다.Swapping
: Main memory에 load되는 process들이 너무 많아지면, Disk에 있는 memory와 main memory를 서로 바꾸는 것. 필요한 것을 main memory에 올리고, 불필요한 것은 disk memory로 내린다.Virtual Memory
라고 한다.OS와 User는 Computer System의 HW 및 SW 자원을 공유하기 때문에
Computer System을 올바르게 관리하기 위해
자원들에 대하여 OS가 접근하려 했는지 User가 접근하려 했는지 구분할 수 있어야 한다.
mode bit
의 사용으로,
OS는 OS를 위하여 실행되는 작업과 User를 위해 실행되는 작업을 구분할 수 있다.
Dual-Mode
:Kernel Mode == Privileged mode
User Mode
system boot 시, HW는 Kernel mode에서 시작한다.
이어 OS가 Load되고, User mode에서 User Process가 시작된다.
Trap(include System Call)이나 Interrupt가 발생할 때마다,
HW는 User mode에서 Kernel mode로 전환한다.
Program은 CPU에 의해 명령이 실행되지 않으면 아무것도 할 수 없다.
즉, 하나의 Program은 Disk에 저장된 파일의 내용과 같이 수동적(Passive) 개체지만,
Process는 다음 수행할 명령을 지정하는 Program Counter를 가진 능동적(Active) 개체이다.
➡️ Process는 CPU, 메모리, 데이터 등과 같은 자원을 가지고 일을 수행,
일 끝나면 자원을 반드시 반환 해야함.
Thread는 하나의 Process 내에서 실행되는 작은 실행 단위이다.
즉, 하나의 process 내에서 여러 개의 thread가 동시에 실행될 수 있다.
(Thread는 Chapter 4 에서...)
OS는 Process Mangement에 대하여 다음과 같은 일을 한다.
(Chap 3 ~ Chap 7)
main memory는 CPU와 I/O Device에 의하여 공유되는,
빠른 접근이 가능한 data repository이다.
폰 노이만 방식의 컴퓨터에서는
CPU가 Instruction Fetch-Cycle동안 main memory로부터 명령어를 읽고,
Data Fetch-Cycle 동안 main memory로부터 data를 읽고 쓴다.
Program이 수행되기 위해서는 반드시 절대 주소로 mapping되고, memory에 load되어야 한다.
CPU 이용률과 User에 대한 Reponse Time을 개선하기 위해,
우리는 Memory에 여러 개의 Program을 유지해야 하며,
이를 위해서 Memory Management 기법이 필요하다.
OS는 Memory Mangement에 대하여 다음과 같은 일을 한다
(Chap 9 ~ Chap 10)
OS는 File-System Mangement에 대하여 다음과 같은 일을 한다.
(Chap 13 ~ Chap 15)앞서 공부한 것처럼, Computer System은 main memory를 백업하기 위해
보조기억장치를 제공해야 한다.
대부분의 최신 Computer System은 HDD와 NVM Device를 프로그램과 데이터 모두에 대한 주요 온라인 저장 매체로 사용한다.
OS는 보조기억장치 관리와 관련하여 다음과 같을 일을 한다.
정보는 통상 main memory와 같은 저장장치에 보관된다.
정보가 사용됨에 따라, 더 빠른 장치인 Cache에 일시적으로 복사된다.
그러므로 우리가 특정 정보가 필요할 경우, 우리는 먼저 Cache에 그 정보가 있는지를 조사해야 한다.
만약 Cache에 있으면 우리는 그 정보를 Cache로부터 직접 사용하면 되지만,
Cache에 없다면 main memory system으로부터 그 정보를 가져와서 사용해야 하며,
이 때 이 정보가 다음에 곧 다시 사용될 확률이 높다는 가정 하에 Cache에 넣는다.
자기 디스크에 있는 file B에서 변수 A의 값을 1 증가시키는 상황.
Chapter 18에서 자세한 내용.
Virtualization(가상화)
는 특정 CPU를 위해 compile된 OS가 동일 CPU용의 다른 OS 내에서 수행된다.
Virtual Machine(가상머신)
의 사용자는 다양한 OS 간을 전환할 수 있다.
Emulation
은 소스 CPU 유형이 대상 CPU 유형과 다른 경우에 해당 시스템의 작업을 수행할 수 있도록 사용된다.
Windows OS에서 실행되는 SW를 Mac OS에서 실행하기 위해 Windows Emulation을 사용할 수 있다.
오늘날 웹 기술이 Traditional Computing 기술의 경계를 확장하고 있다.
회사들은 자신의 내부 서버에 웹 접근을 제공하는 Portal을 구현하고 있다.
Network Computer(=thin client)
Wireless network
Home Computing Environment는 방화벽(firewall)을 갖고 있다.
Public Cloud
: Service를 위해 지불 가능한 사람은 누구나 인터넷을 통해 사용 가능한 CloudPrivate Cloud
: 한 회사가 사용하기 위해 운영하는 CloudHybrid Cloud
: Public, Private 부분을 모두 포함하는 CloudSaaS(Software as a Service)
: 인터넷을 통해 사용 가능한 하나 이상의 응용 프로그램Paas(Platform as a Service)
: 인터넷을 통해 사용하도록 응용 프로그램에 맞게 준비된 SW stack(ex. DB server)Iaas(Infrastructure as as Service)
: 인터넷을 통해 사용 가능한 Server나 저장장치(ex. 생산 data의 backup 복사본을 만들기 위한 저장장치. AWS, Azure)Hard Real-Time
: 시스템의 작업이 정해진 시간 내에 완료되어야 하는 경우를 말한다.Soft Real-Time
: 시스템의 작업이 정해진 시간 내에 완료되어야 하지만, 이 시간 제약 조건이 엄격하지 않은 경우를 말한다.OS는 Computer HW를 관리하고 응용 프로그램 실행 환경을 제공하는 SW이다.
Interrupt는 HW가 OS와 상호 작용하는 주요 방법이다.
HW Device는 CPU에 신호를 보내 Interrupt를 trigger하여 일부 event에 주의가 필요하다는 것을 CPU에 경고한다.
Interrupt는 Interrupt Handler에 의해 관리된다.
Computer가 Program을 실행하려면 Program이 Main Memory에 있어야 한다.
이 Main Memory는 Processor가 직접 access할 수 있는 유일한 저장장소이다.
Main Memory는 Non Volaitle Memory(NVM)이다.
NVM은 Main memory의 확장이며, 대량의 data를 영구적으로 보유할 수 있다.
가장 일반적인 NVM은 program과 data를 모두 저장할 수 있는 HDD이다.
Computer System의 다양한 저장장치 시스템은 속도와 비용에 따라 계층 구조로 구성할 수 있다.
레벨이 높을수록 비싸지만 속도가 빠르다.
계층이 내려갈수록 일반적으로 비트당 비용은 감소하고 반면 access 시간은 증가한다.
최신 Computer Architecture는 각 CPU에 여러 Computing Core가 포함된 Multi Processor System이다.
CPU를 최대한 활용하기 위해 최신 OS는 Multi Programming을 사용하여
여러 작업을 동시에 memory에 load할 수 있으므로 항상 CPU가 실행할 작업이 있게 보장한다.(Idle 상태가 없도록)
Multi Tasking은 CPU 알고리즘이 process 간에 빠르게 전환하여
User에게 빠른 Response Time을 제공하는 Multi Programming의 확장이다.
User Program이 System의 올바른 작동을 방해하지 않도록 System HW에는
User mode와 Kernel mode로, Dual Mode가 있다.
다양한 명령어가 특권을 가지며 Kernel Mode에서만 실행될 수 있다.
예를 들어 Kernel Mode로 전환하는 명령, I/O 제어, 타이머 관리 및 Interrupt 관리가 이러한 명령어들이다.
Process는 OS의 기본 작업 단위이다.
Process Management에는
Process 생성 및 제거, Process 간 통신 및 동기화 기법 등이 포함된다.
OS는 사용 중인 Memory Space와 사용 중인 Process를 추적하여 memory를 관리한다.
또한 Memory Space를 동적으로 할당하고 해제해야 한다.
저장장치 공간은 OS에서 관리한다. 이러한 일에는 file 및 directory를 나타내는
File System을 제공하고 대용량 저장장치의 공간을 관리하는 것이 포함된다.
Virtualization에는 Computer HW를 여러 가지 실행 환경으로 추상화하는 작업이 포함된다.
Computing Environment는
Traditional Computing, Mobile Computing, Client-Server System, Peer-to-Peer System, Cloud Computing, Real-time Embedded System을 포함한 다양한 환경에서 이루어진다.
OS의 3가지 주요 목적?
Computing HW를 효율적으로 사용하려면 OS가 필요하다고 강조하였다.
OS가 이 원칙을 버리고 자원을 낭비하는 것이 적절한 때는 언제인가?
그러한 시스템이 실제로 낭비하는 것이 아닌 이유는 무엇인가?
실시간 환경을 위해 운영체제를 작성할 때 프로그래머가 극복해야 하는 주요 어려움은 무엇인가?
커널 모드와 사용자 모드의 구별은 기본적인 형태의 보호로서 어떤 기능을 수행하는 가?
Cache가 유용한 두 가지 이유를 제시하라.
어떤 문제를 해결할 수 있는가?
어떤 문제를 야기하는가?
Cache의 크기를 Caching하는 장치만큼 크게 만들 수 있다면 Cache의 용량을 늘린 후 원래 장치를 제거하지 않는 이유는 무엇인가?
Cache는 다음의 문제를 야기한다.
일관성 문제: CPU는 Cache된 data가 memory의 최신 data와 동기화되어 있는지 확인해야 한다.
그렇지 않으면 CPU가 Cache된 과거 data를 사용하면서 예상치 못한 결과를 초래할 수 있다.
Cahce의 크기를 크게하지 못하는 이유
분산 시스템의 Client-Server System과 Peer-to-Peer System의 차이를 설명하라.