운영체제#1
LeeMir, 08 March 2021
Introduction
교재
- Modern Operating Systems, 3rd ed.(Andrew S. Tanenbaum)
- 번역서 존재, 강의는 번역서 기준으로 진행
- 현재 4판까지 나와있음
A Modern Computer Consists of :
- One or more processors
- 멀티 코어
- Main memory
- 주 기억 장치
- DRAM : 휘발성 메모리
- Disks
- 보조 기억 장치
- Strogy system(저장 장치)
- 비휘발성 메모리
- Printers
- Various input/output devices
What Is An Operating System
- 하드웨어를 조작하는 기본 기능을 응용 프로그램에게 제공 => 시스템 호출 형태로 시스템 서비스를 제공
- 프로그래머들은 일일이 하드웨어를 조작할 필요가 없음
- 운영체제는 사용자와 직접적인 접촉은 없음
- 운영체제와 접촉하는 대상은 응용 프로그램들임
- 사용자가 운영체제와 접촉하는 방법은 GUI, CUI같은 유저 인터페이스로 접촉하는 방법인데, 유저 인터페이스도 프로그램이기 때문에 직접적인 접촉이 아니다
- Operating System을 실행할 때, CPU는 Kernel Mode로 실행되고, 응용 프로그램을 실행할 때에는 User Mode로 실행된다
- 운영체제의 존재 이유
- 하드웨어는 어셈블리어 이하의 저급 언어로 제어
- 운영체제에는 하드웨어를 제어할 수 있는 모든 것을 미리 작성해놔서 응용 프로그램이 고급 언어로 호출했을 때 하드웨어 제어를 대신 해줌
- 하드웨어들의 Ugly Interface를 Beautiful Interface로 변환해 응용 프로그램들에게 제공
The Operating System as a Resource Manager
- 운영체제는 동시에 실행되는 프로그램들을 관리하는 관리자 역할
- 자원들을 시간적 / 공간적으로 멀티플렉싱함
- 저장장치 및 자원들을 공유
History of Operating Systems
- 1945 - 55 : 진공관
- 1955 - 65 : 트랜지스터와 Batch System
- Batch System : 입력 장치, 출력 장치, 계산 장치가 따로 존재하고, 이것을 테이프라는 자원을 통해 이용하는데, 하나하나 사람이 날라야함
- 코드는 펀치카드로 작성
- 중간에 CPU가 노는 시간이 너무 길음
- Batch System : 입력 장치, 출력 장치, 계산 장치가 따로 존재하고, 이것을 테이프라는 자원을 통해 이용하는데, 하나하나 사람이 날라야함
- 1965 - 80 : IC칩과 멀티프로그래밍의 등장
- 멀티프로그래밍 : 여러 개의 프로그램을 메모리에 적재해서 번갈아가면서 실행
- CPU가 노는 시간을 줄임
- 이 때부터 운영체제가 자원 관리의 기능을 가짐
- 멀티프로그래밍 : 여러 개의 프로그램을 메모리에 적재해서 번갈아가면서 실행
- 1980 - 현재 : Personal Computer의 보급
Computer Hardware Review
- CPU는 항상 Memory(DRAM)로부터 코드를 불러와 읽고 Memory에 씀
- CPU는 모니터나 키보드같은 입출력 장치를 직접 제어할 수 없음
- Video controller, Keyboard controller 칩에 있는 각각의 Memory(Register)에 값을 조작해 입출력 장치를 간접적으로 제어
- CPU와 Memory, 각각의 controller들은 Bus로 연결되어있음
- 그러나 데이터 사용량이 많아지면 속도가 느려져 따로 전용 Bus를 만들어 연결하는 추세
Processor Registers
- User-Visible Registers
- Data, Address, Index, Stack pointer, Segment pointer 등 여러가지 종류의 Register 존재
- User-Invisible Registers
- PC(Program Counter), IR(Instruction Register), PSW(Program Status Word Register, Flag Register라고도 함) 등이 존재
- 특별한 Register이고, 응용 프로그램에서는 이 Register들을 참조하지 않고 운영체제에서 참조 및 수정함
CPU Pipelining
- A three-stage pipeline
- Fetch Unit => Decode Unit => Execute Unit
- 원래에는 프로그램 단위로 Fetch / Decode / Execute를 수행하였으나, Unit 단위로 Pipelining 형태로 수행해 CPU 속도를 높임
- (n+2)번째 명령이 Fetch되는 동안 (n+1)번째 명령이 Decode되고, n번째 명령이 Execute 동시에 실행됨 => 약 3배로 속도가 높아짐
- Fetch / Decode / Execute의 3단계가 아닌 더 많은 단계로 하면 속도가 더 높아질 수 있으나, Hazard라고하는 Execute에서 Jump할 일이 생겨 그 전 단계들에서 수행된 것들이 모두 물거품이 되는 위험성이 존재
- A superscalar CPU
- 한꺼번에 여러개의 Unit(명령)을 Fetch 후 Decode해 Holding Buffer에 집어넣고, 가능하다면 여러개의 Unit을 동시에 Execute
- Unit 간의 Dependency가 존재해 순서가 필요할 경우에는 동시에 실행할 수 없으나, CPU에서 먼저 실행되어야 하는 Unit은 지름길을 만들어 더 빨리 실행되도록 함
- 병렬처리 방식으로, pipeline보다 처리속도 향상
- 한꺼번에 여러개의 Unit(명령)을 Fetch 후 Decode해 Holding Buffer에 집어넣고, 가능하다면 여러개의 Unit을 동시에 Execute
Multithreaded and Multicore Chips
- A superscalar보다도 더 빠른 방법을 찾고자 멀티쓰레드 방법이 나옴
- 여러개의 쓰레드를 코어들이 나눠 수행
Interrupts
-
프로그램을 순차적으로 읽다가 i번째 이후에 Interrupt가 발생하면 PC(Program Counter)가 Interrupt Handler를 가리켜 수행하고, Interrupt가 끝나면 i+1번째로 돌아가 다시 정상적으로 프로그램을 읽어나감
- 읽던 부분을 중단하지 않고, 읽던 것은 끝까지 읽은 후에 Interrupt Handler로 이동함
- 예기치 못한 상황이 발생되면 자체적으로 Interrupt를 발생시킴(Exception이라고 함)
- 예기치 못한 상황 : 0으로 나누려고 했다든지, 존재하지 않는 메모리를 참조했다든지 등
- 운영체제는 Interrupt의 모임이라고도 할 수 있다
Memory
- Memory Hierarchy
- Registers < Cache < Main Memory < Magnetic Disk < Magnetic Tape
- 크기가 작을수록, 접근 시간은 매우 빠름
- Registers, Cache, Main Memory는 휘발성임
- Cache Memory
- CPU에 비해 Main Memory의 처리속도가 너무 느려 Cache Memory를 만듦
- Main Memory에서 데이터를 가져와 저장하고, CPU에서 쓸 수 있게 해줌
- Main Memory의 Memory Address 단위로 가져오는 것이 아니라, Block 단위로 가져와서 한꺼번에 저장함
- Fully Associative Mapping
- Address에서 마지막 64byte를 제외한 나머지 부분을 Tag 형태로 저장해서 검색 속도 향상
- Cache가 꽉 차서 새로운 Tag를 저장할 때에는 LRU 방식으로, 가장 덜 사용된 데이터를 삭제 후 그곳에 저장
- 각 Tag마다 비교회로가 따로 있어야해 가격이 매우 비쌈
- Direct Mapping
- Index별로 들어갈 수 있는 주소를 한정시킴 (address가 xxx70이면 70 Index에만 접근 가능, Tag에 xxx가 저장됨)
- 새로운 데이터를 Access하면 그 Address와 그에 해당되는 현재 Cache의 Index의 Tag를 참조해 비교연산함
- Fully Associative Mapping에 비해 가격이 저렴하고, 속도는 상대적으로 느림
- Set Assosiative Mapping
- N-way Set Associative Mapping
- Direct Mapping에서 한 Index마다 N개의 구역에 저장할 수 있는 방식(N개의 비교회로 존재)
- One-way Set Associative Mapping = Direct Mapping
- N개보다 많은 Block을 참조하게 되면 그 때에는 어쩔 수 없이 삭제를 해줘야함
- Cache는 웬만하면 Hit rate가 높음
- Locality of Reference(참조 지역성) 때문임
- Temporal Locality(시간적 지역성) : 한번 참조되었던 데이터는 다시 참조될 가능성이 높음
- Spatial Locality(공간적 지역성) : 한번 참조되었던 데이터의 인접 데이터들은 참조될 가능성이 높음
- Working Set : 프로그램들이 실행될 때 참조되는 데이터들의 집합
- Locality of Reference(참조 지역성) 때문임