Multi tasking(Time Sharing)
기존에 cpu를 유휴시간 없이 사용하기 위해 multi programming이 필요했다.
이러한 multi programming을 바탕으로 multi tasking을 구현하게 되었다.
하지만 multi tasking을 구현하면서 많은 문제점이 발생
- swapping overhead가 있기 때문에 multi programming & single tasking에 비해 CPU의 효율성이 떨어지게 된다.
- 여러 process의 실행 순서를 정할 CPU scheduling기법이 필요해졌다.
- 더 많은 process를 memory에 적재할 필요가 생기면서 memory의 공간이 부족한 경우 replacement or swapping을 적절히 해야 할 필요해졌다.
- 위의 replacement와 swapping 기법으로도 memory가 부족해지면서 virtual memory 기법이 제안되었다.
OS operations
기본적으로 OS는 booting 시에는 active하게 여러 프로그램을 실행시키지만, 부팅이 끝난 후에는 요청만을 처리하는 passive한 상태가 된다.
요청(Request)
부팅 후에 os code가 실행되는 경우는 “요청”을 받았을 때만 실행되고, 이 요청은 크게 2가지로 나뉜다.
exception/trap
- application의 system call 요청 시
- software error 시(division by zero..)
interrupt
- hardware에 의한 interrupt를 받았을 시(I/O module..)
또한 요청에 의해 실행되는 code가 함부로 memory에 접근하거나 system에 접근하도록 하면 안되기 때문에 dual-mode operation을 통해 os를 보호한다.
Dual-mode
dual-mode는 user mode와 kernel mode로 나눠져 있으며 mode bit을 통해 현재 코드가 어떤 mode인지 확인한다.
또한 system call을 통한 os 작업은 kernel mode로 이루어지고 작업이 끝나면 다시 user mode로 돌아오는 방식이다.

Process Management
OS는 어떤 process가 현재 동작하고 있는지와 다음에 어디를 수행해야 하는지를 알고 있어야 한다.
⇒ process는 실행 중 여러 resource를 요청하고, 끝날 때 resource를 반환해야 하기 때문이다.
- OS는 process를 하나의 구조체로 정의한다.
⇒ process : 코드 + meta data 정보의 구조체이며, 이를 PCB(process control block)이라고 부른다. - single process 환경에서는 cpu의 PC(program counter)만 필요하지만, multi process 환경에서는 각 process가 자신만의 별도의 PC를 가지고 있다.
⇒ 물리적인 PC는 cpu에 하나만 존재하지만, 각 process의 meta data에 각자의 논리적 PC값이 저장되어 있음 - 그 외에도 OS는 process management를 위해 다양한 기능을 application에 제공한다.
⇒ process synchronization, process communication, deadlock handling
Memory Management
OS는 현재 memory 상태를 관리 및 최적화를 해야 한다.
또한 memory가 부족할 때 여러 기법을 사용할 수 있어야 한다.(virtual memory..)
Storage Management
OS는 저장장치에 상관없이 일관된 데이터 표현을 제공해야 한다.
- file : 연속적인 주소의 데이터 집합의 추상화된 객체이다.
⇒ 각 저장장치에 따른 file의 표현이 다름에도 불구하고, OS가 일관되도록 사용자에게 표시한다.
Mass-Storage Management
OS는 device의 공간 및 상태도 관리해줘야 한다.
- computer operation의 bottle neck이 주로 disk subsystem과 disk algorithms에서 발생하므로 이러한 이러한 disk device를 OS가 관리함으로써 computer system의 전반적인 성능을 높힐 수 있다.
⇒ disk scheduling : disk buffer에 올라간 데이터를 순차적으로 처리하는 것이 아닌 disk가 최적으로 기록할 수 있는 데이터 배열을 만드는 기술
- SSD로 인해 최근에는 많이 사용되지는 않는다.
Migration of data

데이터가 caching되면서 여러 위치에 동시에 존재할 수 있게 된다.
이 때 “최신 값”이 우선적으로 고려된다. 즉, register → cache → memory → disk 순으로 데이터에 접근한다.
하지만 공유 데이터(shared data)에서 cache coherence problem이 발생하게 되는데, core 간의 cache coherence problem의 경우는 각 core가 동기화를 위한 메세지를 보냄으로써 해결할 수 있었다.
그런데 분산 시스템 환경에서는 메세지가 네트워크를 통해 전달되어야 하는데 네트워크의 지연시간은 너무 길어 실제 적용이 어렵다는 문제점이 있다.
I/O subsystem
OS는 수 많은 I/O device에 호환이 될 수 있도록 표준을 정해 device들이 해당 표준을 따르도록 한다.
이러한 표준의 경우 많은 이점이 있지만, 각 device만의 추가적인 기능을 완전히 발휘하지 못 하도록 하는 단점도 존재하게 된다.
따라서 각 device는 표준 외에도 자신들만의 기능을 넣은 drivers를 사용할 수 있도록 해 확장성과 기능성을 모두 고려할 수 있도록 하였다.
이 외에도 OS는 buffering, caching, spooling을 통해 I/O가 효율적으로 동작할 수 있도록 지원해준다.
- buffering : I/O의 write를 빠르게 수행할 수 있도록 함
- caching : I/O의 read를 빠르게 수행할 수 있도록 함
- spooling : 서로 다른 devie 간의 속도 차이를 해결하기 위해 memory가 전송 데이터를 잠시 저장해놓는 기술이다.
buffering vs spooling : buffering에 저장되는 데이터는 특정 작업을 처리하기 위한 대기줄의 데이터인 반면, spooling에 저장되는 데이터는 두 device 간 속도 차이로 인한 임시 저장소의 데이터이다.
What is the Difference Between Spooling and Buffering - Pediaa.Com
Protection and Security
OS는 computer system 및 resource를 보호하기 위해 각 users별 ID를 부여하고 user마다의 등급을 부여해 권한을 관리한다.
이 때 프로그램 자체에는 ID가 없기 때문에 프로그램의 권한은 실행자의 권한을 승계한다.
또 특정 프로그램의 어떤 작업에서 root 권한이 필요하다면 해당 작업 동안 privilege escaliation이 발생한다.
⇒ ex. spooling 시 spool 영역은 memory이므로 kernel 권한이 필요하다.
Operating System Services
OS는 user에게 도움이 되는 여러 기능들을 추가적으로 제공한다.
- User interface : user가 이해하기 쉬운 interface 제공
- Program execution : program을 실행하기 쉽도록 한다.
- I/O operations : I/O 장치를 쉽게 이용할 수 있도록 한다.
- File-system manipulation : file을 쉽게 조작할 수 있도록 한다.
- Communications : 컴퓨터 내외로 데이터가 쉽게 전송될 수 있도록 한다.
- Error detection : 에러에 대해 적절히 대응한다.
또한 user뿐만 아니라 computer system이 효율적으로 동작할 수 있도록 하는 여러 기능을 제공한다.
- Resource allocation : 여러 유저 또는 작업에 각각 resouces를 효율적으로 제공
- Accounting : 어떤 유저가 얼마나 resources를 사용하는지를 기록
- Protection and security
System Calls
system calls은 users가 kernel에 간접적인 명령을 내릴 수 있도록 해주는 functions이다.
즉, system calls은 각 OS에 종속적일 수 밖에 없다.
따라서 이식성을 높히고 쉬운 사용을 위해 OS마다의 표준 API를 제공한다.
- windows : win32
- UNIX, Linux and Mac OS X : POSIX
- jvm : java
하지만 이 역시 OS 종류에 종속적이다.

system call을 직접 호출

high language C를 이용한 system call 호출
programming language API는 OS에 독립적인 API를 제공한다.
Virtual Machine
초기 virtual machine은 OS의 가상환경화를 통해 OS(guest) 작업 시 원래의 OS (host) system에 영향을 주지 않기 위해서 고안되었다.

(b)의 virtual-mahcine implementation은 기존 OS kernel에 hypervise기법을 적용함으로써 VM이 자신의 아랫부분을 hardware로 인식하도록 만들어주는 역할을 한다.
Java virtual machine
server는 java source file만 제공하면 client단의 java virtual machine이 가상 환경에서 해당 source file을 직접 interpret하는 방식이다.
이러한 방식을 통해 하나의 source file을 여러 OS 환경에서 돌릴 수 있게 되었다.

참고
- Operating System Concepts
- 운영체제, 한양대학교 강수용 교수님
'CS > OS' 카테고리의 다른 글
| [Operating System] Process Synchronization 1 (0) | 2024.07.27 |
|---|---|
| [Operating System] CPU Scheduling (1) | 2024.07.27 |
| [Operating System] Processes And Threads (0) | 2024.07.27 |
| [Operating System] Computer System Overview (0) | 2024.07.27 |
| [Operation System] Course Overview (0) | 2024.07.27 |