🦖Operating System
이 시리즈는 공룡책을 공부하고 난 내용을 정리한 글 입니다.
- Operating System Principles (10th edition), Abraham Silberschatz, Peter B. Galvin, and Greg Gagne
① Users : 현재 동작 중인 프로그램 (FrontEnd)
② system and application programs : 개발자는 OS가 알려주는 것을 사용해서 프로그램을 제작
③ Operating System : User 프로그램과 그 프로그램이 사용하는 리소스, HW 관리, 자원 분배 관리 등의 일을 함.
④ Computer Haedware: CPU, Memory, I/O
💡 정의 : 컴퓨터 하드웨어 리소스를 편리(Abstraction)하고 효율적으로 관리를 해주는 소프트웨어이다.
운영체제란 무엇인가?
① Abstraction : 사용자가 밑단의 복잡한 HW 몰라도 되도록 추상화하는 것.
② Sharing : HW 리소스는 1개인데 한 번의 하나의 일만 가능하니 OS가 HW자원을 관리한다.
-> Time multiplexing, Space multiplexing
③ Protection : 모든 리소스들을 보호하고 함부로 점유하거나 다른 것을 쓰지 못하도록 한다.
④ Fairness: 골고루 동작하도록 한다.
⑤ Performance: 최대 성능을 낼 수 있도록 한다.
Definition in textbook
Computer HW architecture (Abstract view)
i) ALU (Arithmetic Logic Unit) : 산술연산, 비트연산을 수행함
ii) CU (Control Unit) : RETURN, JUMP 등 전체 프로그램 Path를 컨트롤해줌, Control flow 관리
iii) MMU (Memory Management Unit) : data를 cpu에 저장해두고 쓴다
iv) PC (Program Counter) : 현재 수행되어야 하는 명령어의 주소값을 저장
v) IR (Instruct Register) : PC가 지정하는 명령어를 저장
vi) SP (Stack Pointer) : Stack에
vii) PSW (Process Status Word) : Process의 상태(ready, run, …) 를 저장.
viii) General purpose registers : I/O Device를 컨트롤하는데 사용된다.
Bootstrapping in Linux
(전기가 공급 되면…)
CPU가 스스로를 초기화 시키고 스스로가 잘 동작하는지(register) 체크한다.
0xfffffff0 번지로 점프한다. 이곳에는 BIOS/UEFI
가 있다. 이들은 memory나 i/o device가 잘 동작하는지 확인한다. 이들은 전원 공급이 끊겨도 데이터가 남아 있을 수 있는 ROM으로 비휘발성이다.
◼ UEFI ( Unified Extensible Firmware Interface ) : BIOS가 advanced된 형태.
기존 BIOS는 플랫폼 종속적이라 범용적으로 사용이 불가했는데 UEFI는 플랫폼 independent하다. GUI로 된 CMOS이다.
◼ BIOS ( Basic Input/Output System) : 컴퓨터가 동작하기 위해서 필수적으로 필요한 메모리, i/o 디바이스 등 cpu를 제외한 나머지 구성요소들이 잘 연결이 되었는지 정상적으로 동작하는지 테스트한다 (POST Power On Self Test)
Boot Loader(LILO/GRUB)를 실행시킨다.
: BIOS에서 모든 준비가 끝이 나면 윈도우를 켜야 하는데 윈도우가 어디에 있는지는 Boot Loader가 알고 있다. Boot Loader 안에는 디스크에 존재하는 운영체제가 디스크 어디에서부터 시작되어 저장되어 있는지, 여러 개의 운영체제가 있으면 각각 어디부터 어디에 저장되어 있는지 이것을 메모리로 로드해오는 작업 코드 까지도 들어 있다.
◼ MBR (Master Boot Record) in BIOS
◼ ESP (Efi System Partition ) in UEFI
LILO : 운영체제가 업데이트가 되는 경우에 새로 부트로더를 갱신을 해야하지만 GRUB는 파일명이랑 커널이 위치하는 파티션만 알고 있으면 알아서 읽어들여야 하는 시작부분을 알 수 있다. 확작성이 더 좋다.
Boot Loader가 할 일을 다하면 CPU를 사용할 수 있는 권한을 운영체제에게 넘겨준다. (LILO/GRUP가 압축되어있는 커널을 메모리로 풀어서 올리면 실행될 수 있는 커널의 이미지가 메모리에 로드가 되고 나면 CPU를 사용할 수 있는 권한을 운영체제에게 넘겨준다.)
+) OS가 부팅되고 처음 실행되는 프로그램은 Idle Program이다. Idle 가 몇 %인지는 cpu 점유율을 나타내는 척도이다.
Instruction Set Architecture (ISA)
CISC vs RISC
Intel(x86 CISC), SPARC, MIPS, PowerPC, ARM(RISC), Alpha, …
Pipelining
→ Fetch, Decode, Execute, Write Back, etc
CPU가 동작하는 순서에서 착안을 하게 되었는데
Fetch : PC에 있는 주소값을 가지고 오는 동작을 수행
Decode : IR에 저장된 명령을 CPU가 실제 시행할 수 있는 형태의 전기 코드로 바꾸어 주는 작업
Excute : 실행
Write Back : 실행을 다 하고 난 뒤 Output을 메모리에 쓰는 것
→ 이 네가지가 독립적으로 수행이 가능하다
→ 최대 4배만큼의 성능 향상이 이루어질 수 있지만 항상 그런 것은 아니다
→ RISC의 단점 : cache가 많이 필요하다.
Instruction-Level Parallelism (ILP)
→ Superscalar vs. VLIW
Superscalar : 인텔에서 만듬, CPU에서 지금 실행해야하는 것 다음에 실행해야하는 것을 판단한다. 고쳐쓰기가 안 된다.
VLIW : 컴파일러에서 판단
→ Simultaneous multithreading
→ Multi-core
CPU Die 안에 레지스터와 cache가 따로 있고
메인 메모리는 따로 있고 코어들이 다이 하나에 들어가 있는 것.
한 시스템 안에 여러 cpu를 두고 메모리를 공유하는 형태
→ workstation
한 시스템 안에서 여러 cpu가 존재하고, CPU마다 독립적인 메모리를 가지고 있다. 연산을 나누어 수행
ex) 기상청 컴퓨터
독립적인 컴퓨터들이 네트워크로 연결이 되어 있다.
Cf) Parallel(분산적으로 해서 동시에 동작할 수 있도록 하는 것) vs Distributed System(초창기 네이버)
I/O가 끝나면 Controller가 CPU에게 이 사실을 알려줄 수 있는 방법
Direct I/O : 직접적으로 레지스터에 명령어를 넣는 것
Memory-mapped I/O : 레지스터 대신에 메모리 특정 번지에 mapping을 시켜 그 메모리에 명령을 쓰는 것이 I/O 컨트롤러에게 명령을 내리는 것과 같이 동작. 메모리는 레지스터보다 싸고 양이 많다. cpu가 메모리에 write하는 명령을 시행할 때 I/O controller한테 명령을 내리는 것과 같이 작동을 한다.
→ Communicates with registers in I/O controller
실제로 cpu가 직접적으로 뭔가를 하지 않고 I/O controller한테 write하면 독립적으로 수행한다
→ Typically, IR (Instruction Register) & DR (Data Register)
명령을 잘 수행하려면 IR이 있어야 한다.
Synchronous / Blocking
특정 프로세스가 I/O를 요청해서 디바이스 드라이버를 거쳐서 실제 하드웨어에게 명령이 가는데 이게 실행이 되서 끝날 때 까지 시간동안 기다려야 하는 경우. I/O가 완료된 다음에 다음 작업을 해야하는 경우
Asynchronous / Non-Blocking
프로세스가 동작하는데 종속성이 없는 경우
: 저장 시스템은 속도, 가격, 휘발성 등의 기준에 따라 계층적 구조를 가진다.
[비싸고 빠르다] registers > cache > main memory > solid-state disk >hard disk > optical disk > magnetic tapes [ 느리고 싸다 ]
ROM(Read Only Memory) 한 번만 쓸 수 있고 전력 공급이 끊겨도 지워지지 않는다.(비휘발성)
RAM(Random Access memory) 반복적으로 쓰고 지울 수 있으면 전기 공급이 끊기면 지워진다.(휘발성), ROM에 비해 상대적으로 빠르다
a. SRAM(Static RAM) : 전기를 튀겨주는 소자가 없음, 빠르고 비싸다.
→ 전원이 공급되지 않을 때도 1, 0을 써 둔것이 유지가 된다.
b. DRAM(Dynamic RAM) : 소자가 있음, 느리고 싸다.
→ 전원 공급이 안되면 시간이 지날수록 1, 0을 기록해둔 것이 뭉개지기 때문에 다시 refresh를 해주어야 한다. 이때 refresh를 하는 동안 다른 작업을 할 수 없기 때문에 비교적 느리다.
Write-through : 변경사항을 바로 다시 써 일관성은 좋지만 성능이 떨어진다.
Write-back : 변경사항을 바로 다시 쓰지 않고 CPU가 수행할 일이 없을 때 update한다. 일관성은 떨어지지만 성능은 좋다.
→ CPU가 할 일이 없을 때 update
HDD가 느린 이유는 arm을 넣었다 빼는 시간이 가장 오래 걸린다. (arm seek time)
→ 같은 실린더에 분산해 저장함으로서 해결한다,
블록(데이터를 저장할 수 있는 단위) 하나에 수정사항이 생겼을 때는 블록 안에 데이터를 갱신하는 것이 아니라 데이터가 저장되어 있는 유닛을 disable 시키고 다른 곳에 새로 쓴다. 재활용하기 위해서는 전체를 클리어를 해야 하는데 블록을 클리어하는 횟수가 제한되어 있다.
NAND → Random Access 가능 + 비휘발성
운영체제는 사용자 프로그램이 함부로 시스템에 접근하지 못하도록 유저모드와 커널모드를 나눈다.
이 모드는 누가 CPU를 점유하고 있느냐에 따라 구분한다. os가 cpu를 점유하고 있으면 이를 kernel 모드라고 한다. 유저 모드에서 커널 모드의 기능을 호출하고 싶다면 시스템 콜(System call)이라는 인터페이스를 통해야 한다.
[ 이 내용은 뒷 단원에서 자세히 다룬다. ]
① CPU protection
② Memory protection
③ I/O protection
💻 OS takes controls of the system
- Bootstrapping
- System calls (Trap)
- Interrupts
- 아무것도 하지 않을 때도 OS가 컨트롤 하기도 한다. → Idle()
Batch System
: 흐름에 따라 순차적으로 일을 수행한다. 병목현상으로 인해 performance가 떨어진다. → 운영체제라고 부르기는 어렵고 Resident Monitor라고 부르기도 한다. → 실제 CPU가 Process 연산하는 시간은 아주 적은데 I/O처리를 하는데 오랜 시간이 걸린다.(병목현상)Multiprogramming systems
: 인터럽트를 이용해 여러 프로그램을 동작할 수 있도록Time-sharing system
: 특정 시간 이상으로는 프로세스가 동작하지 않도록 하는 장치를 타임 인터럽트 개념을 활용해서 만들어 두었다. → fairness 보장 → response time을 낮출 수 있다Transitional computing
Mobile computing
Real-time embedded computing
Client-server computing
Peer-to-Peer computing
cloud computing
: HW 자원의 가상화
💻 [4사산업 혁명]
컴퓨터가 싸고 작아졌다 ->여기저기 센서들을 달아볼까? →IoT 사물 인터넷
, raw data들이 많아져서 이 data를 의미 있게 만들기 위해 data를 처리하는 기술을 연구하기 시작했다. ->Big Data
, data가 많아지니 다시 computing power가 필요하였다. 그러나 실제로 컴퓨터를 사용할 때는 대체로 10%미만의 power을 사용한다. 이렇게 노는 자원들을 모아서 하나의 시스템으로 묶어 사용할 수 있게 하였다 ->Cloud
-> 그래도 남는 자원… ->AI
- IaaS (Infrastructure as a Service) : 컴퓨터 HW 자원을 지원받는 것.
- PaaS(Platform as a Service) : HW에 플랫폼까지 처리해 주는 것
- SaaS (Software as a Service) : HW에 플랫폼에 서비스까지 올려주는 것
UNIX (Bell Lab) 계보를 따르는….
→ BSD
→ Next Step
→ Xenix
→ Sun OS → Sun Microsoft → Oracle
POSIX - Unix 계보를 따르는 애들이 지키는 표준
Embedded System → Vxworks ( 항공기나 우주산업에 사용되는 hard real time os)