[OS1] Intoroduction
Computer?
컴퓨터란?
컴퓨터의 정의에 정답은 없지만 쉽게 정의하면 “하드웨어 위에서 소프트웨어가 수행되는 장치” 라 정의할 수 있다.
하드웨어는 CPU, 주기억장치, 보조기억장치로 이루어져 있다
운영체제란?
컴퓨터 하드웨어 자원(CPU, Memory, I/O device)를 관리해주는 소프트웨어이다. 컴퓨터 위에 존재하는 어플리케이션 소프트웨어가 잘 동작하도록 도움을 준다. 이를 위해 하드웨어 자원을 관리할 수 있어야한다.
1. CPU 관리
하나의 CPU 위에서 여러 개의 프로그램이 수행된다면 어떤 프로그램이 먼저 수행되고 언제 다른 프로그램이 수행될 지 등의 관리가 필요하다. 프로세스 및 스레드 관리, 프로세스 간 데이터 전달 및 공유 …
2. 메모리 관리
16G 의 Physical Memory 로 30G Memory 가 필요한 프로그램을 실행할 수 있도록 관리한다. 운영체제에서 Virtual Memroy 를 운영하기에 가능하다.
3. I/O Device 관리
HDD, SDD 의 파일을 관리하는 파일 시스템. 그래픽 장치, 마우스, 키보드 등의 장치 제어.
어플리케이션 프로그램과 시스템 프로그램
- 어플리케이션 프로그램
- 특정 목적으로 컴퓨터를 사용하기 위해서 실행시키는 프로그램
- 시스템 프로그램
- 컴퓨트를 활용하기 위해서 운영체제가 만들어놓은 프로그램
- 대표적으로 윈도우 탐색기 및 운영체제가 설치되면 같이 설치되는 프로그램들
I/O
하드웨어들은 BUS 로 연결되어있다. 메모리에서 CPU 로 데이터가 이동 중일 때는 다른 동작을 할 수 없다. I/O 는 크게 I/O 장치들과 I/O 장치를 제어하는 컨트롤러/어댑터로 나눌 수 있다
Operating System?
다시 말해 운영체제는 Resource Manager 이다!
- Convenience
- Abstraction
- Encapsulation
- 실제 내부를 모르더라도 외부에서 쉽게 사용할 수 있다.
- 실제 System call 을 모르더라도 운영체제를 통해 쉽게 자원들을 접근하고 제어할 수 있다.
- Abstraction
- Efficiency
- Sharing, Protection, Fairness, Performance
- 컴퓨터 위에서 여러 프로그램이 동시에 돌아갈 때 자원을 효율적으로 배분해줄 수 있다. 또한 하나의 프로그램이 전체 컴퓨터를 독점하는 것을 막는다.
Computer System Operation
Von Neumann architecture
CPU 에서 프로그램을 실행시킬 때 메모리에서 명령어를 읽어와서 실행시킨 후 다음 명령어를 읽어와 실행시킨다. 순차적으로 명령어를 읽어와서 실행시키는 아키텍쳐이다.
Bootstrapping in Linux
- CPU 는 인텔 기준 메모리 (0xfffffff0) 에서 명령어를 읽어와 실행한다
- 전원이 꺼지더라도 데이터가 존재하는 메모리 영역 (ROM) 이 존재해야한다.
- 해당 명령어는 BIOS/UEFI 로 이동해 실행한다
- BIOS (Basic Input/Output System)
- UEFI (Unified Extensible Firmware Interface)
- BIOS/UEFI 가 POST 후 Boot Loader 를 실행한다
- POST (Power On Self Test) - 하드웨어 초기화 및 테스트
- 이후 컨트롤을 Boot Loader 에게 넘겨준다 Boot Loader 는 운영체제의 OS 커널을 읽어 메모리에 올리고 실행한다
- Firmware - 하드웨어에 포함된 소프트웨어이다. 보통 ROM 에 저장되어 동작하기에 업데이트가 힘들거나 불가능하며 변경 시 물리적인 변경이 필요하다
CPU
ISA, Instruction Set Architecture
- Instruction 의 수가 많아져 점점 복잡해졌다. 명령어의 개수를 줄이고 기존에 있는 것을 사용한다. 복잡도를 줄였기에 성능이 많이 발전되었다.
Pipelining
- 명령어의 실행 단계 - Fetch -> Decode -> Excute -> Write Back
- 메모리에서 Instruction Register 로 명령어를 가져온다.
- 무슨 명령어인지 Decode 한다.
- 해당 명령어를 실행한다.
- 결과를 저장한다.
- 파이프를 여러 개로 만들어 한 시점에 4개의 명령어를 각각 다른 단계에서 실행하면 4배 빠른 것처럼 느껴질 수 있다.
ILP, Instruction-Level Parallelism
- Superscalar - 명령어가 두 개일 때 둘 사이의 의존 관계가 없으면 동시에 실행한다.
- Very long Instruction Word - 하나의 명령어에 여러 개의 명령어를 집어 넣는다.
-
Multi-core - 하나의 메모리를 여러 CPU core 가 공유하면서 프로그램을 동시에 실행시킨다.
- Concurrent - 하나의 core 에서 두 개의 프로그램이 번갈아가면서 실행된다.
- Parallel - 두 개의 core 에서 각각 두 개의 프로그램이 실행된다.
- Simultaneous - 명확하지 않게 context 에 따라 1, 2번 둘다 사용한다.
- 메인 메모리를 여러 CPU가 공유한다. 많은 데이터 처리와 계산 처리에 효과적이다.
- 보드들이 네트워크로 연결되어 서로 통신하며 성능을 높인다. 세컨더리 스토리지를 쉐어하는 Clusterd system architecture.
I/O Operation
- I/O를 I/O 컨트롤러에 요청한다. I/O 작업 하는 동안 CPU에게 다른 일을 주어 효율적으로 사용되게 한다. 다른 일을 하고 있다가 I/O작업이 끝나면 컨트롤러가 CPU에게 다했다고 알려주는 것이 Interrupt 이다!
- DMA - 키보드에서 눌린 값을 전달할 때 CPU와 메모리 사이에서 주로 버스가 다니므로 DMA 컨트롤러에서 기다리다가 버스가 사용되지 않을 때 메모리에 데이터를 전달하는 방법이다.
-
OS가 있으면 Interrupt 후 OS가 실행되어 다음에 어떤 일을 할지 스케쥴링한다.
- (a) = Synchronous / Blocking
- (b) = Asynchronous / Non-Blocking
Interrupt
- 키보드, 타이머 interrupt.
- 하드웨어 디바이스에서 발생시키는 interrupt.
Trap
- 프로그램에 의해서 발생하는 interrupt.
- System call 어플리케이션이 수행된다.
- System call - 일반적인 함수 호출과 같다. 운영체제에 존재하는 함수. 함수의 body는 OS에 존재한다. 그래서 Operation system을 call하는 것. 운영체제를 실행하기 위해서 Trap이 걸리면 user mode 에서 kernel mode로 바뀌면서 하드웨어 자원을 쉽게 쓸 수 있는 인터페이스를 제공한다.
Fault(Exception)
- CPU가 자신에게 거는 interrupt.
- 실행할 수 없는 명령문이 존재할 때 OS 를 수행시키기 위해서 Fault.
DMA
- 사용자가 키를 누른다는 가정
- Keyboard Controller 에서 Interrupt controller 를 통해서 CPU에 interrupt를 걸고 레지스터에서 입력값을 읽어간다.
- 디스크는 2 byte 정도의 데이터를 disk controller 가 메모리의 버퍼에 써야한다.
- BUS 는 CPU와 메모리 사이에서 주로 사용된다.
- Disk Controller 가 직접 쓰려면 충돌이 일어나기 때문에 DMA Controller 를 통해서 CPU가 메모리를 사용하지 않을 때 메모리에 데이터를 집어넣는 방법이다.
Hardware Protection
Protection - 내부에서 비정상적으로 동작하지 않도록 보호하는 것 Security - 외부의 영향없이 프로그램이 정상적으로 동작하도록 하는 것
CPU protection
- 하나의 프로그램이 하드웨어 자원을 독차지하는 것을 막는다.
- 운영체제가 CPU 전체를 관리하기 때문에 모든 프로그램에 공평하게 나누어 실행하게 한다.
- 무한루프를 도는 경우에도 Interrupt 를 걸고 운영체제가 제어한다
- 주기적으로 인터럽트를 발생시키는 Timer 가 존재한다.
Memory protection
- 참조할 수 없는 메모리 주소를 참조하는 경우 Fault 로 운영체제를 실행시킨다.
I/O protection
- disk 를 프로그램이 마음대로 변경 및 삭제할 수 없도록 한다.
- I/O 작업은 운영체제만 할 수 있다.
- disk 에 데이터를 써달라고 커널에 요청하면 system call 을 통해 운영체제가 수행한다.
OS 가 Controll 을 가지고 실행될때
- Bootstrapping - 부팅 될 때
- System call - 어플리케이션이 운영체제에 수행을 요청할 때
- Interrupt - 하드웨어 디바이스에서 이벤트가 발생했을 때
- Timer Interrupt
댓글남기기