흔히 말하는 공룡책과 강의를 바탕으로 작성한 시리즈이다.
운영체제란?
Computer System Structure
- User
- Application programs
- OS
- Hardware
- I/O devices(마우스, 키보드, 스피커, 프린터, 모니터, 디스크 등)
- 컴퓨터 입장에서 디스크가 삽입되었다가 빠지므로
OS는 무엇을 하는가?
- User와 Application(System)의 관점에 따라 목적이 다르다.
- User 입장
- Application(System)
- 제때 자원을 할당해주는가
- 제어를 제때 해주는가(에러를 막는)
- 자원(CPU 시간, 메모리 공간, 파일 저장 공간, 입출력 장치 등) 할당자
- 시스템을 효율적이고 공정하게 운영할 수 있도록 어느 곳에 자원을 할당할지 결정
- 제어 프로그램
- 컴퓨터의 부적절한 사용 방지위해 사용자 프로그램 수행 제어
OS의 정의
- OS는 policy에 맞게 설계되어 있다.
- OS의 보편적인 정의는 없다.
- 좁게 보면 kernel(core 부분: 컴퓨터의 시작부터 끝까지(항상 수행) 작동한다.)을 말한다.
- 그외 기타 부분은 작은 부분의 OS를 말한다.
- System program: OS와 연관되어 있지만 커널의 일부는 아님
- Application program: 시스템 운영과 관계없는 모든 program
컴퓨터는 어떻게 작동하는가?
- 부팅 프로세스
- 프로세스가 동작하기위해서는 메모리 상에 있어야 하는데 HW는 메모리가 아니다. OS를 동작하기 위해서는 메모리 상에 있어야 한다. 메모리는 전원이 꺼지면 휘발성이라 사라진다. 이 부분을 해결해주는 프로세스가 부팅 프로세스다. 펌웨어(firmware)라고 알려져 있는 컴퓨터 내의 읽기 전용 메모리(ROM:Read Only Memory) or EEPROM에 저장된다. OS의 커널을 찾아 메모리에 적재한다. 이후에 서비스 제공 시작. (HW에서 주소를 가져와 커널코드를 메모리에 올려놓고 OS가 작동하게 된다.)
- 첫 시스템 process가 init 후 시스템은 완전히 부트된 상태, 무슨 사건이 발생하길 기다린다. -> 인터럽트로 이어짐
Computer System Organization
- Bus connection
- 하나의 선으로 한 장치가 여러 장치들에 접근할 수 있는 체제
- 각 장치들은 memory를 가지려고 하는데 이를 OS가 관리해준다.
Computer System Operation
- I/O device와 CPU는 프로세스를 따로 가지고 있고 동시에 실행가능하도록 설계되어 있다.
- 각 디바이스는 컨트롤러가 있으며 local buffer를 가지고 있는데 CPU가 data를 main memory에서 또는 로부터 local buffer에 보내거나 가져온다.
- CPU는 할 일들을 맡겨놓고 자신의 일을 하게 된다.
- 디바이스 컨트롤러는 interrupt를 통해서 CPU에게 이를 알린다.
- CPU에게 interrupt는 작동 중에 다른 장치의 요청이 끝났음을 알릴 때를 말한다.
- CPU는 interrupt가 보통 1byte 단위로 오는데 이는 상당히 많고 어디에서 오는지 모른다. 그래서 interrupt vector를 통해 interrupt의 정보를 관리한다.
- interrupt driven OS system
- 작업을 맡기고 작업이 끝났음을 보고 받는 정도
Interrupt Handling
-
HW는 어느 순간이든 시스템 버스를 통해 CPU에 신호를 보내 interrupt
-
SW는 system call을 통해 interrupt
-
polling 방식: 작업이 끝났는지 계속 확인한다. interrupt를 보고 받지 않고 자신이 정한 시간에 확인하는 방식
- 계속 신경을 써주어야 하고 작업의 딜레이가 발생할 수 있지만, 자신의 시간을 보장받을 수 있다.
-
vectored interrupt system 방식
-
System에 따라 적합한 방식을 선택할 수 있어야 한다.
-
interrupt 루틴은 반드시 현재 상태를 저장하고, 인터럽트가 끝나면 저장되어 있던 복귀 주소를 PC에 적재하고 중단되었던 연산이 다시 시작된다.
Interrupt Timeline
context switching
- 지금까지 한 작업을 저장해놓고 interrupt를 처리하고 다시 저장했던 작업을 찾아서 가져오는 작업, 이 시간을 context switching delay(latency)라고 한다.
-
유저 입장에서 처리하다가 디바이스에서 ?
-
multitasking의 핵심도 결국 context switching이다.
I/O Structure
- 컴퓨터 외부의 장치를 통틀어 말할 때 peripheral 이라 한다.
- local buffer를 통해 레지스터에 정보를 등록하고 이 정보를 디바이스 컨트롤러가 보고 제어한다.
Storage Structure
- 튜링 머신: Alan Turing이 개발한 머신이다
- 연산, 연산을 읽고 쓸 수 있는 장치, 이를 저장하는 tape가 존재
- Main memory
- 흔히, RAM이라 하며 재기록 가능한 메모리이다. DRAM라 불리는 반도체 기술로 구현된다.
- 대부분 휘발성, 전원이 꺼지면 날라가는 메모리, 영구 저장하기에는 너무 작기 때문
- Secondary Storage(보조 저장 장치)
- 프로그램과 data를 상시 저장할 수 있는 비휘발성 메모리
- 하드디스크(크고 싸다, CD처럼 생긴 것이 있음), SSD(전기적으로 data를 저장하고 읽을 수 있음)
- 읽기 전용 메모리인 ROM, 소거 가능한 프로그램 가능-읽기 전용 메모리인 EEPROM
- bootstrap같은 정적 프로그램을 저장(변경 불가이므로)
- EEPROM은 변경은 가능, 자주 변경 불가
- 적재: 주 메모리 -> CPU 내부 register
- 저장: register -> 주 메모리
Storage Hierarchy
- process가 접근하는데 걸리는 시간, 비용, 휘발성에 따라 계층구조가 형성된다.
- 어떤 것을 어디에 저장해둘 것인지 policy가 필요하다.
- registers
- process랑 붙어 있음, 접근이 가장 빠르다.
- cache
- register보단 cpu에서 멀리 떨어져 있지만 접근이 상당히 빠르다.
- RAM
- 위의 저장 디바이스는 너무 비싸다.
- 상시적으로 접근하고 싶은 것을 여기에 넣는다.
- 여전히 휘발성 여기까지 모두 휘발성이다.
- Solid-State Disk(SSD): 반도체 디스크
- Hard disk: 자기 디스크
- 전원이 켜져있을 때는 SSD 제어기가 data를 RAM으로 복사하고 전원이 꺼지면 RAM으로부터의 data를 자기 디스크로 복사한다.
Caching
- cache에 정보가 있다면 바로 정보를 사용한다.
- 정보가 없다면 cache에 data를 복사하고 사용한다.
- 하지만 가격적인 측면에서 비싸기에 작을 수 밖에 없다.
Direct Memory Access Structure
- 10bytes를 전달하는데 10번의 interrupt를 걸어준다. 그렇다면 파일 하나 옮기는데 interrupt가 상당히 많을 것이다. 이를 위해 존재 ?
- CPU가 관리할 수 없는 현상이 일어날 수 있다.
- CPU의 완전한 micro kernel 부분을 잃고 효율성을 가지는 것
- 폰 노이만 구조의 문제점을 부드럽게 해결하는 장치 \
폰 노이만 구조
- 컴퓨터를 효율적으로 설계하기 위해 만듦
- 입력 장치에서 data가 입력되면 제어부, 연산/논리부는 메모리부와 data를 주고받으며 연산을 하고 그 결과를 출력 장치로 보낸다.
- harvard 구조와 경쟁
- harvard 구조와 다르게 복잡성은 줄고 단순하다.
- 단 나누어지지 않고 하나로 되어 있어 폰 노이만 bottle neck(병목 현상)으로 느려질 수 있다.
컴퓨터 시스템 구조
Operating System Structure
- 여러 개의 작업을 처리하고 싶기 때문에 필요하다.
- 여러 개의 작업은 Multiprogramming, Timesharing 등이 있다.
- Multiprogramming(Batch Processing)
- 하나의 작업이 끝날 때까지 다음 작업은 수행되지 않고 순차적으로 실행된다.
- 스케쥴링이 job 단위로 이루어진다.
- 이 작업을 먼저, 다른 작업은 나중에 이런식.
- context switching을 적게 하므로 낭비하는 시간이 적다.
- Timesharing(multitasking)
- process가 하나인데 동시에 일을 처리할 수 없다.
- logical extension이다. 실질적으로 멀티태스킹은 아니기에
- 다만, 아주 짧은 시간 동안 여러 일을 왔다갔다 처리하기에 동시에 처리하고 있음을 느끼게 되는 것이다.
- interactive computing
- context switching을 자주하여 낭비하는 시간이 많다.
- CPU기반의 스케쥴링
- swapping: 10개의 process를 동시에 돌리기 위해 메모리에 올려야 하는데 너무 커서 메모리에 올릴 수 없는 경우, 디스크와 메모리 사이를 왔다갔다 하면서 올렸다 뺐다 하는 작업을 말한다. 컴퓨터가 빨라야 한다.
System의 장단점을 파악하고 설계하려는 목적에 맞게 멀티 프로그래밍과 시분할 중 선택해야 한다. 어떤 것이 무조건 좋고 어떤 것이 무조건 나쁜건 없다.
OS operation
- interrupt 기반으로 동작한다.
- Hardware interrupt
- 마우스 입력 등
- OS 입장에서 interrupt 기반으로 Dual mode operation을 한다.
- Dual mode(User mode & kernel mode)
- kernel를 보호하는 측면에서 privileged일 때만, system call을 했을 때만 접근할 수 있게 되어 있다.
System call
- User process가 시스템 콜을 하면 kernel mode로 들어가고 처리 후 kernel mode로 나온다. - kernel mode에서 문제가 생긴다면 ?
- 안전 장치가 있는 편이다.(특정 시간이 지나면 저절로 나오게 한다.)
Process Management
-
Program은 disk에 저장되어 있는 passive entity
-
Process는 Program의 동적인(active) 형태이다. 즉, 해야 하는 일들
-
Process가 끝나면 자원을 가져와야 한다.
program counter
-
다음 수행해야 할 instruction이 무엇인지 명시를 해준다.
-
특히, 멀티 테스킹에서 필요하다. 작업이 어디서 잠깐 중단되었는지 알아야 재개가 가능하다.
Multi-thread
-
thread들이 동시에 진행되기에 program counter가 여러 개 필요하다.
Process Management Activities
(프로세스 관점에서 OS가 할 일)
- 프로세스 생성, 정지, 재개, 죽음
- 프로세스 동기화를 위해 의사소통을 위한 채널이 필요하고 서로 자원 경쟁이 생겼을 때 진전이 없고 막혔을 때 deadlock이 생길 수 있는데 이를 처리해야 할 필요가 있다.
Memory 관리(메모리 관점에서 OS가 할 일)
- 프로세스를 실행하기 위해 절대 주소로 매핑되고 메모리에 올라와 있어야(적재) 하는데 얼마만큼의 공간을 확보해야 하는지 OS가 관리해야 한다.
- 어떤 프로세스가 메모리 공간에 남아있고 빠져야 하는지 관리해야 한다.
파일 시스템 관리
- 파일은 program과 data를 나타낸다.
- 다수의 사용자가 파일에 접근하려 할 때 누구에 의해서, 어떤 방법으로 파일이 접근되어야 하는가를 통제해야 한다.
Mass-storage 관리
-
컴퓨터 시스템은 반드시 main memory에 내용을 저장하기 위해 보조 저장 장치(secondary storage)를 제공해야 한다.
-
대부분의 프로그램은 주 메모리에 적재될 때까지 디스크에 저장되어 있어 디스크 관리가 중요하다.
-
backup
Caching
-
정보가 사용됨에 따라 보다 빠른 장치인 캐시에 일시적으로 복사된다.
-
특정 정보가 필요할 때 먼저 캐시에서 그 정보의 유무를 확인한다.
-
캐시에 존재하면 캐시로부터 직접 사용 - 캐시에 존재하지 않다면 main memory에 정보를 가져와서 사용하고 이 정보를 캐시에 넣는다.(다시 사용될 확률이 높다고 가정)
Data migration
- data를 상위 계층으로 옮기는 것을 말한다. 메모리 계층 구조에 따라 상위 계층으로 data를 옮길 때마다 복사가 일어난다.(높은 계층으로 갈수록 복사본이 여러 곳에 존재)
- 복사를 하는 개념이다보니 상위 계층으로 갈 수록 independent하게 process가 작동하기 때문에 하나의 변수에 작업을 처리한 결과들이 상이할 수 있다.(cache coherency)
I/O subsystem
- 입출력 구조에서 OS가 무엇을 해줘야 하는가?
- spooling - 프린터는 물리적 현상이 일어나기에 느리다. 빠른 -> 느린 장치
Protection and Security (OS는 둘 다 필요)
- Protection
- internal process 간의 경쟁에 대한 보호
- 자원에 대해 program, process, user의 접근을 제어
- ex) 파일의 권한을 특정 프로세스에만 준다. - Security - external attack에 대한 방어
Computing environment
- 모바일 환경은 multi tasking에 대해 덜 까다롭다.
- 각각의 환경에 따라 요구하는 것이 다르고 최적화가 잘 되도록 해야 한다.
- Virtualization
- 가상화 환경 2가지
- 여러 개의 OS가 하나의 HW 위에 있어 자원을 얻고자 경쟁한다. (b)
- 하나의 OS 위에 vmware가 하나의 응용프로그램으로 OS에게 자원을 할당해달라고 요청한다. (a)
- 다수 사용자들이 단일 사용자를 위해 설계된 시스템에서 작업을 수행할 목적으로 쓰이기도 한다.
- Cloud Computing
- 동시에 몇 명이 들어와서 몇 명이 작업할건지 알기 힘들다.
- 계산, 저장장치, 응용 등을 네트워크를 통한 서비스로 제공한다. 예를 들어, 아마존 Elastic Compute Cloud를 통해 아주 큰 크기의 저장장치를 인터넷 상의 누구든 사용이 가능하게 한다.
SaaS(Software as a service)
- 인터넷을 통해 사용 가능한 하나 이상의 응용 프로그램
ex) google docs
PaaS(Platform as a service)
- 인터넷을 통해 사용하도록 응용에 맞게 준비된 SW stack
ex) database 형태를 사용하게 하는 서버
IaaS(Infrastructure as a service)
- 인터넷을 통해 사용 가능한 서버나 저장장치
- 백업 복사본을 만들기 위한 storage로 유지
Real Time Embedded System
- 특정 시간 내에 작업을 수행한다는 보장이 있어야 한다. (Real Time)
- 작은 임베디드 메모리에 OS를 전부 올릴 수는 없다.
요구사항에 따라 OS를 다르게 설계해야 한다.