Evolution of OS
Phase 1 (Early ’50s ~ Mid ’60s)
-
컴퓨터 하드웨어 가격은 고가, 인건비는 저렴
-
ENIAC = CPU(진공관) + Memory(Magnetic core) + 구동을 위한 발전 설비
- CPU의 Utilization을 최대화가 목적, 인건비 투자는 고려대상
-
Operating System이 존재하지 않고 Human Operator가 Operating System의 역할을 했음
- Human Operator의 역할
- 사용자로 부터 Punch card 뭉텅이를 수령
- Punch card 뭉텅이를 컴퓨터 시스템에 Loading하고 수행
- 수행 결과를 프린트로 출력
- 출력된 결과물을 사용자에게 전달
- Human Operator의 역할
-
Job : 프로그램을 수행시키는 기본 단위
-
최초의 OS 등장 배경 :
- Human Operator의 느린 Job-to-job 전환 속도로 인한 컴퓨터 시스템의 비효율성의 해결이 필요
-
Human Operator를 배재하기 위해 나타난 Batch Monitor
-
Batch of Jobs을 하나의 Tape에 기록하고, 컴퓨터시스템은 이 Tape에 있는 Job을 순차적으로 수행
-
문제점 : CPU가 입/출력을 하고 그 입/출력이 종료될 때 까지 I/O 장치를 모니터링 해야됨.
(그 시간에 CPU가 다른 유용한 연산을 하게 하면 더 좋겠지)
-
-
CPU와 I/O 연산을 중복할 수 있는 하드웨어 메커니즘 “ I/O Channel”
-
CPU는 I/O명령만 I/O Channel에 전달해주고 자기는 돌아와서 계속 다른 연산을 수행할 수 있음
-
I/O controller가 I/O 동작이 끝나면 CPU가 입력된 데이터를 읽어갈 수 있도록 I/O controller가 CPU에게 Interrupt 매커니즘을 작동을 시킴
-
I/O 동작의 종류
-
Synchronous I/O : CPU가 어떤 연산을 수행하다가 I/O를 만들었을 때 , 그 I/O의 수행이 종료되야만 다음 연산으로 수행이 될 수 있는 것
💁🏻 문제점 : 얘는 어떻게 해결?
-
Asynchronous I/O : CPU가 어떤 연산을 수행하다가 I/O를 만들었을 때 , 그 I/O의 결과를 기다리지 않고 바로 다음 CPU연산을 해도 되는 것
💁🏻 I/O Channel + Interrupt 매커니즘으로 해결
-
-
Multiprogramming : 컴퓨터 시스템이 한번에 한개 이상의 Active한 Job을 수행시킨다
- Active한 Job : 수행을 시작했지만 아직 종료되지 않은 상태의 program
- Degree of Multiprogramming : 현재 main memory에 존재하고 있는 Active한 Job 의 개수
-
Multiprogrammed Batch Monitor의 등장
-
Synchronous I/O일 때 다른 Job에게 CPU를 넘김으로 해서 CPU의 Utilization을
-
문제점 :
[1] Memory Protection
- 어떤 Job의 주소 사용 Bug로 인해 다른 Job이나 OS의 영역을 침범함으로써 문제를 일으키는 현상
[2] Memory Relocation
- Job이 main memory의 어느 위치에 load될 지를 알 수 없기 때문에 임의의 주소에서도 문제없이 수행될 수 있어야 함
[3] Concurrent Programming
- 여러 Job들이 동시에 수행되면 공유 데이터에 동시에 접근함으로써 생기는 문제를 해결할 필요성이 대두됨
-
Memory Management Unit (MMU) :
- Memory Protection와 Memory Relocation 문제를 만족시키기 위한 하드웨어 메커니즘
- 가상 메모리 주소를 실제 메모리 주소로 변환
Q : MMU는 하드웨어와 소프트웨어중 어떤 것으로 구현하는 것이 타당한가?
A : MMU는 하드웨어로 구현해야됨
MMU가 소프트웨어적으로 구성된다면 :
- 성능이 저하됨 : Instruction이 한번 수행 될려면 최소 1 많은면 두세번의 메모리 주소가 발생하게 됨
- 주소 변환을 위해 다시 주소 변환이 필요해지는 문제 발생
-
Phase 2 (Mid ’60s ~ Mid ’90s)
-
하드웨어의 발전(컴퓨터 시스템이 점점 작아지고 값싸지고), 사람들의 인건비는 올라감
-
Time sharing operating system의 등장
- CPU의 시간을 여러 사용자에게 나눠주면서 컴퓨터와 프로그래머가 Interactive하게 됨
- 사용자 별로 File system을 설계하기 시작함
- Response time, Protection이 중요해지기 시작함
Phase 3 (Mid ’90s ~ Present)
- Operating System이 Internet Access가 가능하게 하는 것은 필수
- 3C Convergence :
- Communication, Computer, Consumter Electronics의 경계가 무너지는 현상
- OS with multimedia support
- 과거에는 uni-media (text)를 처리, 현대는 오디오, 동영상을 처리
- Continuous media : 특정한 시간적 제약에 맞춰 연속적으로 처리를 해야 하는 데이터
- Downloading Streaming :
- Downloading : 전체 데이터를 확보한 다음에 작업을 시작할 수 있음
- Streaming : 일부의 데이터만 확보한 상태에서 작업을 시작할 수 있음
- 과거에는 데이터에 대한 처리가 Downloading이였는데 multimedia가 되면서 Streaming 이 중요하게 됨
- OS의 multimedia support가 부각되며 발생한 스케줄링 방식의 변화 :
- 중요한 일은 먼저 처리하는 우선순위 기반 스케줄링에서 Continous Media를 원활하게 처리하기 위한 Bandwidth 스케줄링으로 변화
Function of OS
-
Coordinator : Task들의 자원 사용 충돌을 중재하는 역할
- 운영체제가 coordinator로서 관장해야 하는 하드웨어 장치들은 어떤게 있을까?
- CPU, IO device, Memory (+ 파일 관리, 네트워크 관리)
-
OS를 크게 5개의 부분으로 나뉠 수 있다
-
컴퓨터 시스템 입장에서 봤을 때 Network은 I/O device의 일종인데 근데 왜 별로도로 Network system을 가지고 있지? File system이라고 하는 거는 Hard disk drive I/O를 관리하는 장치인데, 이것도 왜 I/O System에서 관리하지 않고 따로 하지?
💁🏻 현대 Unix 계열 운영체제 시스템은 IO 장치를 크게 세 가지로 나눔 :
IO device 특징 Character IO device I/O의 단위가 Byte인 장치 (ex. Keyboard, mouse) Block IO device I/O의 단위가 Block인 장치 (ex. Hard disk) Network IO device Network를 제어하는 장치 (ex. Socket) 💁🏻 이렇게 나눈 이유 : I/O 관리를 어떻게 하느냐에 따라 성능이 영향을 받음. 네트워크도 마찬가지
- 만약 Block 과 Network IO 를 하나의 IO device가 관리하게 된다면, 빠르게 처리되는 Network data와 느리게 처리되는 Hard disk data가 같은 Queue를 사용하게 되면서 컴퓨터의 전체 성능이 저하될 수 밖에 없다.
💁🏻 결과적으로 I/O System은 Character IO device를 관장하고, File System은 Block IO device를 관장하며, Network system은 Network IO device를 관장.
-
- 운영체제가 coordinator로서 관장해야 하는 하드웨어 장치들은 어떤게 있을까?
-
Illusion Generator : OS는 자기를 사용하는 여러 사용자들이 쉽게 프로그래밍할 수 있도록 추상을 제공해야됨
-
복잡한 걸 추상화 시켜서 사용자들이 간단히 사용할 수 있도록 추상화 레이어를 제공해주는 게 OS이다
-
또한 OS는 하나의 유저에게만 제공하는 게 아니라, 여러 유저에게 추상화 레이어를 제공
-
이런 추상화 레이어는 일반적으로 잘 작동하지만, 언제나 성공하는 것은 아님
- Time-Sharing system에서 Thrashing : 사용자의 수가 어떤 Threshold를 넘어서는 순간 Response Time이 급격히 증가하는 현상
-
-
Standard Library : 시스템을 관리하는데 필요한 모듈들을 제공해서 프로그래밍을 쉽게 만드는 역할
Review of Computer Hardware
Computer System Architecture
-
Computer System의 가장 기본적인 구성요소 : CPU, Memory, I/O device
-
System bus : 3가지 구소 요소를 연결시키는 요소
-
2가지 종류 :
[1] Data Bus : 실제 Data 전송用
[2] Address Bus : 주소 전송用
-
기본적인 Bus operation : Read/Write
-
Bus Master : Bus transaction 시작 할 수 있는 요소
- 대표적인 Bus Master 하드웨어들 : CPU, I/O Controller, DMA Controller 등
-
Bus Slave : 데이터를 담고있는 장치 (데이터를 담기 위해 주소도 가지고 있다)
- 대표적인 Bus Slave 하드웨어들 : Main memory, I/O Controller안에 들어있는 Buffer memory 또는 Register
-
Bus Arbiter : Bus Master들이 서로 Bus를 장악하려고 할 때, 특정 Bus Master에게 Bus를 제공해주는 조정자
-
-
I/O Device Controller : CPU를 대신해서 I/O device를 관장함
-
Bus Master의 역할이 될 수 도 있고 Bus Slave의 역할이 될 수도 있고
-
I/O Device Controller의 기능 :
- 자기 Buffer안에 데이터가 있으면 그걸 I/O Device로 출력하는 역할
- 자기 Input Register가 비어 있으면 I/O Device에서 데이터를 읽어오는 역할
Example. Output operation
-
Character I/O operation 일 때
- Interrupt-Driven I/O : I/O 동작이 완료되면 I/O Controller가 CPU에게 비동기적으로 완료되었음을 알려주는 방식
- Pooling I/O : I/O 동작이 완료될때까지 CPU가 반복해서 I/O Controller의 Register 상태를 확인하는 방식
-
I/O Addressing : I/O Controller안에도 여러 개의 Register들이 있기 때문에 I/O Register에 대한 Addressing
-
구현 방법 :
[1] Port-mapped I/O : (Ex. Intel Processor)
Port Register : I/O Controller안에 있는 Register
Memory Address space와는 별도의 Port Address space를 가지게 됨
Input/Output을 하기 위해서 별도의 명령이 필요함, 그리고 명령의 Target 주소는 Register의 주소가 됨
[2] Memory-mapped I/O :
Main Memory의 주소공간에 일부를 할애해서 I/O Register들을 mapping하는 방법
Input/Output을 하기 위해서 별도의 명령이 필요가 없음, memory의 load/store하는 명령을 사용하면 됨
-
-
DMA (Direct Memory Access)
-
CPU의 개입없이 I/O Controller가 메모리에 직접 접근하여 Data를 읽거나 쓸 수 있도록 하는 기능
-
Block data를 옮길 때 CPU Intervention을 최소한으로 줄이기 위해 사용
- Character I/O operation 일 땐 한 Character에 대한 전송이 끝나면 Interrupt를 통해 CPU에게 전달
- DMA를 하게 되면 Block 단위로 전송이 끝나면 Interrupt를 통해 CPU에게 전달
-
동작과정 :
-
CPU ➡️ DMA : Sending the following information
(read/write 명령, I/O device address, starting location in memory, block size)
-
CPU는 다른 작업을 실행
-
DMA transfers the entire block of data, one word at a time, directly to or from memory
-
DMA ➡️ CPU : DMA Operation이 끝나면 interrupt
-
-
Block 데이터를 옮기는 방식 :
[1] Cycle Stealing : CPU가 Bus를 사용하고 있지 않을 때만 DMA controller가 Bus를 사용하는 방식
[2] Block Transfer : CPU와 DMA controller가 대등하게 경쟁하여 Bus를 사용하는 방식
-
-
Interrupt Mechanism
- Hardware Interrupt :
-
CPU외부에서 CPU가 관심을 가져야될 사건이 발생하면 signaling을 통해 알려주는 것
-
비동기적임
-
Interrupt의 처리 과정
-
현재 Instruction을 완료하고 Micro-processor의 PC값을 안전한 곳에 저장
-
현재 수행 중인 program을 중단
-
Interrupt Request Number를 통해 Interrupt source를 확인
-
Interrupt Vector Table을 검색해서 Interrupt Service Routine(Handler)의 주소를 확인하고 수행
(Interrupt Request Number가 Interrupt Vector Table의 index로 적용을 함)
-
-
PIC (Programmable Interrupt Controller)
-
Micro-processor는 다양한 시스템에 사용될 수 있어서 하드웨어로 Interrupt Mechanism을 구현하면 확장성을 감당하지 못함
-
PIC Input : CPU의 Interrupt Pin에 인가되는 line 하나
-
PIC Output : 보통 Interrupt source를 위한 입력 라인을 16개 정도 가지고 있음
-
PIC를 사용함으로써, 16개의 I/O Controller들을 CPU Interrupt line에 물릴 수 있음
만약 설계한 시스템의 I/O 개수가 16개보다 크면?
-
동기화나 스케줄링의 이유 때문에 잠시동안 특정 Interrupt source를 disable 해야 할 경우가 있음
💁🏻 PIC의 각 Interrupt source line마다 flag 레지스터가 존재함, CPU를 통해 flag 레지스터의 값들을 0 또는 1로 세팅할 수 있음. flag를 0으로 masking 해버리면 그 Interrupt source의 Interrupt는 꺼져버리게 되는 것. 이런 식으로 우리가 특정 인터럽트의 특성을 변형시키는 작업을 소프트웨어적으로 할 수 있음
-
PIC를 사용을 하면, 우리가 인터럽트의 확장성 문제를 해결할 수도 있고, 특정 인터럽트를 끄거나 켤 수 있는 유연한 동작을 할 수도 있음
-
-
- Software Interrupt :
- 현재 수행하는 프로그램에 문제가 발생했을 때, 그 문제를 해결하는 함수로 분기 하기 위해서 발생
- Exception 같은거
- 동기적임
- OS는 Hardware Interrupt와 Software Interrupt를 기본으로 해서 동작하는 매커니즘을 가지고 있음
Hardware Protection
-
Protection 문제 : 어떤 Job이 자기에게 할당된 메모리가 아니라 다른 영역의 메모리를 엑세스하면 문제가 발생
-
Protection 문제 해결방법 :
- Base Register, Bound Register 사용 (MMU에 있는 Register들)
- 이 두 Register는 Job이 바뀔 때 마다 OS가 정확한 값으로 setting 해줘야됨
- 이 두 Register의 Access는 오직 OS만 해야된다
-
Privileged Instruction : OS만 수행 할 수 있는 Instruction
-
Basic Mechanism : Dual mode operation
-
Micro-processor의 특정 Register(Processor Status Register)중에 있는 Mode Bit로 구분한다
Kernel Mode :
Mode Bit가 0인 모드. Privilleged Instruction을 수행할 수 있는 모드
User Mode :
Mode Bit가 1인 모드. User Program을 수행하는 모드. 단 Privilleged Instruction은 수행
-
Privileged Instruction 구현 방법 :
- CPU가 fetch 한 명령을 Decoding하는 과정에서 Mode Bit를 체크함
- 방금 읽어드린 명령이 Privilleged Instruction인데 Mode Bit == 1일 경우, soft interrupt를 발생시켜서 그 프로그램의 수행을 abort시켜야됨
-
왜 Dual mode로 동작해야되나?
- Computer System은 User program은 전혀 신뢰하지 , 통제된 환경에서만 수행시킴
- 그 반면에 Computer System은 Operating System은 신뢰함
-
OS가 Kernel Mode에서 수행될 때 부여받는 주요 권한
-
Privileged Instruction을 수행시킬 수 있는 권한
-
모든 Memory 영역에 접근할 수 있는 권한
(User program은 자기에게 부여받은 공간만 Memory access할 수 있음)
-
-
Mode Change의 통제 방법 :
-
User mode Kernel Mode
-
Ex. User program을 수행하다가 I/O operation이 필요해서 I/O Register를 접근 (= 보통 Privileged Instruction 임)해야될 때
-
Interrupt을 발생시켜 하드웨어적으로 처리하면 된다
-
-
Kernel Mode User mode
- 이미 Kernel Mode에서 수행되고 있는 OS가 Mode Chage를 하면 됨
-
-
-
Dual mode operation을 이용해서 IO도 보호해야 하고, 메모리도 보호해야 하고, CPU도 보호 해야함
-
I/O Protection
-
어떤 한 Job이 I/O Register를 마음대로 access해서 I/O를 독점하는 걸 막아주어야됨
-
방법 : Port Register를 access하는 것을 모두 Privileged Instruction로 만들면됨
(I/O에 관련된 모든 함수들은 Kernel 내부로 들어가야된다는 의미)
-
-
Memory Protection
- MMU에 있는 Register들을 통제하는 것
- 주로 Memory가 다른 Job에 의해서 corrupt되지 않게 막는 것
-
CPU Protection
-
어떤 한 Job이 CPU을 독점하는 걸 막아주어야됨
-
방법 : 해당 Job에게 허용한 만큼의 시간을 타이머로 세팅. 타이머가 종료가 되면, 인터럽트가 발생. 인터럽트가 발생해 Mode 변경이 일어나면 운영체제가 제어권을 확보하게 되고, 그 프로그램이 더 이상 독점하지 않도록 빼놓을 수가 있음.
-
Counter register를 access하는 것도 Privileged Instruction이 됨
-
-
《Reference》