참고: 링크텍스트
1. What is an OS?
-
하드웨어를 관리하는 소프트웨어
-
운영체제의 핵심은 커널(Kernel)인데, 커널은 컴퓨터의 전원이 켜지면 항상 메모리에 상주하는 프로그램이다.
-
따라서 좁은 의미의 운영체제로는 커널 자체를 말하고, 넓은 의미로는 커널과 여러 주변 시스템을 다루는 유틸리티들을 포함한다. 일반적으로 커널이 같으면 동일한 운영체제로 취급한다.
-
컴퓨터 시스템은 위와 같이 하드웨어(Hardware), 운영체제(Operating System), 각종 소프트웨어, 사용자(User)로 나뉜다.
이러한 시스템들 사이에서 운영체제의 역할은 사용자 관점과 시스템 관점으로 나뉜다.
- User view : 쉽게 사용하고 performance 하기 위한 program
- System view : resouce를 allocation & control 하는 program
- manage all resources
- confllicting request 를 효과적이고 fair 하게 결절
- error 와 improper use 에서 보호
운영체제의 목적
-
컴퓨터 시스템의 자원을 효율적으로 관리 → 사용자 간의 형평성을 유지, 주어진 자원으로 최대한의 성능
-
컴퓨터 시스템을 편리하게 사용하도록
Widely-used Kernel 자료구조
- Lists (singly/doubly/circularly), Stacks, and Queues
- Trees
- Hash Functions
- Bitmaps
2. 운영체제의 특성
-
동시 작업 가능 여부
1) 단일 작업(Single Tasking)
- 한 번에 한 작업만 가능한 운영체제이다. 한 명령이 끝나기 전에 다른 명령을 수행할 수 없다. (ex. MS-DOS)
2) 다중 작업(Multitasking)
- 동시에 두 작업 이상 처리가 가능한 운영체제이다. (ex. UNIX, MS windows)
-
사용자의 수 (동시에 여러 사용자 접속 가능 여부)
1) 단일 사용자 (ex. MS-DOS, MS window)
2) 다중 사용자 (ex. UNIX, NT server)
-
처리 방식
1) 일괄 처리(Batch Processing)
- 작업을 일정량 모아 한 번에 처리하는 방식. 작업이 완전히 종료될 때까지 기다려야 한다.
2) 시분할(Time sharing)
- 현대 컴퓨터가 사용하는 방식. 여러 작업 수행 시 컴퓨터 처리 능력을 일정 시간 단위로 분할하여 사용
- 일괄 처리 시스템에 비해 짧은 응답 시간을 가짐
- Interactive 방식
3) 실시간(Real time OS)
- 데드라인(Deadline)이 있음. 정해진 시간 안에 어떤 일이 반드시 종료되어야 하는 시스템을 위한 OS
3. Computer system organization
-
1개 이상의 CPU와 장치 컨트롤러(Device Controller)들로 구성되어있다. 그리고 이들끼리 공통 버스(Common Bus)로 연결되어 메모리를 공유한다.
-
각 device 는 device controller와 연결되어 있음
-
Concurrent execution of CPUs & devices 는 memory cycle을 competing -> 병렬로 수행
- each device controller는 device type 부분 부분을 담당 하며, local buffer를 가진다.
- CPU는 데이터를 main memory <-> local buffer 하도록
- I/O device & CPU 는 concurrently 실행
- I/O 는 device -> loccal buffer of controller
- device controller informs CPU that it has finished its operation by causing an interrupt.
각 장치 컨트롤러(Device Controller)마다 로컬 버퍼(Local Buffer)가 있는데, CPU가 메인 메모리와 각 장치의 로컬 버퍼 사이에서 데이터를 이동시킨다. 입출력은 장치에서 로컬 버퍼로 데이터를 전송하는 방식이고, 입출력 장치(I/O device)는 CPU와 동시에 실행될 수 있다. 장치 컨트롤러는 CPU에 인터럽트(Interrupt)를 발생시킴으로써 작업이 끝났음을 알린다.
4. Interrupt
- 신호를 보내 이벤트의 발생을 알리는 것
- 컴퓨터가 여러 작업을 동시에 수행하다가 특정 이유로 인해 기존 작업을 잠시 중단해야 할 때 인터럽트 신호를 보내고, 인터럽트를 처리한 뒤 다시 기존 작업으로 돌아온다.
- 인터럽트는 하드웨어 또는 소프트웨어에 의해 발생할 수 있다.
Interrupt handling (HW 관점)
하드웨어는 시스템 버스(System Bus)를 통해 CPU에 신호를 보냄으로써 인터럽트를 발생시킨다.
- Old interrupt handling (x86)
- Advanced feature
Interrupt handling (SW 관점)
소프트웨어에 의해 발생된 인터럽트를 트랩(Trap) 이라고 부르고, 프로그램이 오류를 범한 경우인 '예외(Exception)'나 프로그램이 커널 함수를 호출하는 경우인 '시스템 콜(System Call)'로 트랩을 발생시킨다.
인터럽트는 인터럽트 된 명령어의 주소를 저장한 뒤, 인터럽트 벡터(Interrupt Vector)를 통해서 제어권을 인터럽트 핸들러(Interrupt Handler, OS의 일부)로 넘겨준다.
인터럽트 벡터는 인터럽트를 처리할 수 있는 모든 서비스 루틴(Service Routine)의 주소를 저장하고 있는 공간으로, 파일 읽기/쓰기 등과 같은 중요한 동작들이 하드 코딩되어있다. 이렇게 인터럽트를 처리하고 나면 기존 작업으로 돌아온다.
- interrupt 는 interrupt vector (contain adress of all the service routine) 를 통해 interrupt service routine으로 control 호출 전송
- interrupt 는 os의 한 부분
- interrupt architecture은 해결 후 복귀하기 위해 adress를 저장해야한다.
- trap(expection) : error나 user request로 발생하는 software-generated interrupt
Interrupt Timeline(Single process)
Classes of interrupts
- Program (Trap or Software Interrupt)
- arithmetic overflow
- division by zero
- execute illegal instruction
- reference outside user’s memory space by user’s request (e.g. system call or monitor call)
- Timer
- I/O
- Hardware failure
5. Storage Structure
커널은 실행기(Executor)를 통해 프로그램을 실행시킨다. 실행기는 기억장치(Storage)에서 실행파일(ex. exe파일 in Window)을 가져오고, 커널이 이를 메인 메모리에 할당해 실행시킨다. 메인 메모리(Main memory)는 CPU가 유일하게 직접 접근할 수 있는 큰 저장 공간이다.
하지만, 메인 메모리는 너무 작고 전원이 꺼지면 데이터가 모두 사라지는 휘발성(Volatile)이기 때문에, 용량이 크고 저렴하고 비휘발성(Non-volatile)인 보조 기억 장치(Secondary storage)가 필요하다.
- Main memory : CPU 가 직접 접근 가능 한 storage
- Secondary storage : main memory의 확장 비 휘발성의 large storage capacity
- Hard disk : magnetic recording material
- disk 표면은 track으로 나누어지고, track 은 sector로 또 나누어짐
- disk controller가 device 와 computer 사이의 logical interaction을 결정한다
- Solid-state disks : hard disk 보다 빠르고, 비휘발성
Caching
- 최신의 데이터를 유지하기 위해 high-speed memory를 사용한다.
- Requires a cache management policy
- 데이터를 여러 level 에서 동시에 저장 -> 여러 단계에서 일관성있게 사용 가능
Migration of A from Disk to Register
- 여러개의 process 가 접근을 원할때 가장 최근의 데이터를 보장해주는 것에 어려움이 있음
- Multitasking 환경에서는 가장 최근의 값인지 유의하여 사용해야함.
- Multiprocessor 환경에서 모든 CPU가 캐시에서 최신 값을 가질 수 있도록 하드웨어에 캐시 일관성을 제공해야 한다.
- distributed 환경에서는 여러 데이터 카피가 존재 할수 있다
Direct Memory Access Structure(DMA)
장치와 메모리를 직접 연결하는 방식인 DMA(Direct Memory Access)
- high-speed I/O devices 를 사용하기 위해 memory speed 에 가깝게 보내야한다.
- device controller는 CPU 개입없이 buffer storage -> main memory 로 데이터 블록을 전송
- 블록당 하나의 interrupt 만 생성
6. Operating System Architecture
운영체제의 가장 중요한 부분 중 하나는 프로그램을 동시에 수행할 수 있는 능력이다.
Concept of Multiprogramming
멀티프로그래밍은 여러 프로그램을 메모리에 로드해두고 한 프로세스가 대기 상태가 되면 다른 프로세스의 작업을 수행하는 시스템이다. CPU는 오직 한 번에 한 작업만 수행할 수 있고, 한 사용자가 CPU, I/O 장치를 오래 사용 못하도록 작업 스케줄링(Job Scheduling)을 통해 작업들이 선택되고 수행된다.
- Multiprogramming 은 effciency를 위해 필요함
- 단일 사용자가 CPU 및 I/O 디바이스를 항상 사용 중인 상태로 유지할 수는 없다.
- Multiprogramming organizes jobs (code and data) so CPU always has one to execute.
- 시스템의 전체 작업중 하위 일부가 메모리에 저장
- job 하나를 선택하여 실행 (scheduling)
- wait 해야하는 경우 os는 다른 job으로 switch
Concept of Multitasking
- Timesharing (multitasking) : CPU가 job을 switch 하도록 도와주는 logical extension
- process : Each user has at least one program executing in memory
- CPU scheduling : If several jobs ready to run at the same time
- swapping :If processes don’t fit in memory, swapping moves them in and out to run.
- Virtual memory : allows execution of processes not completely in memory.
7. OS Operations for Protection
- OS는 잘못된 program이 다른 program을 잘못 실행하지 않도록 보장해야한다.
- Dual-Mode Operation
- I/O Protection
- Memory Protection
- Timer
Dual-Mode Operation
-
운영체제는 사용자 프로그램이 마음대로 시스템에 접근하지 못하도록 모드(Mode)를 나눈다. 사용자 프로그램의 잘못된 수행으로 다른 프로그램이나 OS에 피해가 가면 안되므로 보호장치가 필요하기 때문이다.
-
모드는 유저 모드(User Mode)와 커널 모드(Kernel Mode)로 나뉘고, 이를 통해 운영체제 자신과 다른 시스템 요소들을 보호한다.
- Mode bit 는 hardware로 부터 provided
- system 에서 사용자 code 또는 kernel code 를 실행하는 시기를 구분하는 기능 제공
- some instruction은 kernel mode를 실행할수 있는 권한을 가짐
- system call 이 mode를 kernel로 변경하고 , 사용자에게 call을 reset 해줌
I/O and Memory Protection
-
I/O Protection
- 모든 I/O 명령문들은 특권 명령이다. 따라서 User Program이 절대 커널 모드에서 제어를 얻을 수 없다. User Program은 이때 인터럽트 벡터(Interrupt vector)에 새로운 주소(address)를 저장한다.
- User Program이 I/O를 하는 과정은 다음과 같다.
-
시스템 콜을 이용하여 Trap을 발생. 인터럽트 벡터의 특정 위치로 이동
-
인터럽트 벡터가 가리키는 인터럽트 서비스 루틴(Interrupt Service Routine)으로 제어권(Control)이 이동
-
올바른 I/O 요청인지 확인 후 I/O 수행
-
I/O 완료 시 제어권을 시스템 콜 다음 명령으로 옮김
-
Memory Protection
-
인터럽트 벡터와 인터럽트 핸들러(handler)에게는 반드시 Memory Protection을 제공해야 한다.
-
interrupt vector와 interrupt service routine(인터럽트 벡터에 새 주소를 저장하는 사용자 프로그램)에 대한 메모리 보호
-
프로그램의 메모리 보호를 위해 (프로그램이 액세스할 수 있는 legal한 주소의 범위를 결정하는) 두 개의 레지스터를 사용
- base register: 가장 작은 legal한 물리적 메모리 주소를 보유
- limit register : range of size를 포함합니다.
- range를 벗어나는 메모리가 보호
Timer
- Timer : os가 control을 할수 있도록 지정된 period가 지나면 컴퓨터를 중단
- timer는 every clock tick 마다 감소
- timer가 0에 도달하면 interrupt 발생
- 현재의 시간 계산 가능
- load timer 은 특권 명령
8. System Call
-
시스템 콜(System Call)은 커널과 사용자 프로그램을 이어주는 인터페이스 역할을 한다. 사용자 프로그램이 디스크에 있는 파일을 여는 것은 파일 시스템에 접근한다는 의미다. 시스템에 접근하기 위해서는 커널 모드로 전환되어야 하는데, 이때 시스템 콜을 사용한다.
-
직접적인 시스템 콜보단 API(Application Program Interface)를 통해서 사용
API – System Call – OS Relationship
System Call Implementation
- 각각의 시스템 콜은 숫자로 구별된다: system call과 관련된 number
시스템 콜 인터페이스(System Call Interface)가 이 숫자에 따라 매핑된 테이블을 유지한다. 시스템 콜 테이블(System Call Table)은 메모리 주소의 모음인데, 해당 메모리 주소는 인터럽트 서비스 루틴을 가리키고 있다.
- system interface는 숫자에 따라 table index 유지
- system interface는 os kernel에서 의도된 system call을 호출하고 system call 상태와 value return
System Call Parameter Passing
- OS에 parameter를 전달하는 데 사용되는 세 가지 방법
-
Call by value : 가장 단순한 방법, 레지스터에 바로 변수를 넘겨주는 방식이다.
-
Call by reference : 만약 변수가 레지스터보다 더 많은 경우는, 블록(block)이나 테이블(Table)에 저장한 후 저장된 주소를 레지스터에 변수로 넘겨주는 방식이다.
-
스택에 변수를 저장.
System Calls 의 종류
- 프로세스 제어(Process Control) - end/abort, load/execute, create/terminate process, get/set process attributes, wait for time, wait/signal event, allocate/free memory
- 파일 관리(File management) - create/delete file, open/close, read/write/reposition, get/set file attributes
- 장치 관리(Device management) - request/release device, read/write/reposition, get/set device attributes, attach/detach devices
- 정보 유지(Information maintenance) - get/set time/date/process/file/device attributes
- 의사소통(Communications) - create/delete communication connection, send/receive messages, transfer status info, attach/detach remote devices
9. Operating-System Services
운영체제는 사용자들에게 도움을 주는 여러 기능들을 제공한다.
- User Interface(UI)
-
UI는 사용자와 컴퓨터 시스템이 만나는 지점을 말한다. 거의 모든 운영체제가 UI를 가지고 있다.
-
인터페이스는 크게 CLI(Command-Line Interface)와 GUI(Graphic User Interface), Batch로 나뉜다.
-
CLI는 사용자가 텍스트 명령을 통해 명령을 내리는 인터페이스이다. 이러한 인터페이스를 제공하는 프로그램을 셸(Shell)이라고 부른다.
-
GUI는 현재 가장 흔하게 찾아볼 수 있는 인터페이스이며, 키보드 타이핑, 마우스 클릭 등 다양한 방법으로 화면에 띄워진 그래픽을 조작해 컴퓨터에게 명령을 내린다.
-
Batch는 명령을 파일에 넣어두고 파일이 실행되면서 명령을 실행하는 인터페이스이다.
- Program Execution
- 시스템은 반드시 프로그램을 메모리에 로드하고, 이를 실행할 수 있어야 한다. 그리고 정상적으로든 비정상적으로든 실행을 종료시킬 수 있어야 한다,
- I/O Operations
- 실행 중인 프로그램이 파일이나 I/O 장치를 사용하는 입출력을 필요로 한다면 운영체제는 입출력 명령을 수행해야 한다. 이때 효율과 보안을 위해 사용자가 직접 입출력 장치를 조작하지 않고 운영체제를 거치도록 한다.
- File-system manipulation
- 파일을 읽고 쓰고, 생성하고 삭제한다. 또 사용자가 접근하지 못하도록 막기도 한다.
- Communications
- 프로세스들이 서로 정보를 교환할 때, 운영체제는 공유 메모리(Shared Memory)나 메시지 패싱(Message Passing, packets moved by the OS)이라는 방법을 사용한다.
- Error Detection
- 운영체제는 발생할 수 있는 에러를 바로 탐지할 수 있어야 한다. CPU나 메모리, I/O 장치, 사용자 프로그램 등에서 에러가 발생할 수 있다. 각 에러 종류마다 올바르고 일관적인 컴퓨팅을 위해 운영체제는 적절한 액션을 취해야 한다.
운영체제의 또 다른 기능으로, 자원 공유를 통해 시스템의 효율적인 작업을 보장한다.
- Resource allocation
- 다수의 사용자나 작업이 동시에 수행될 때, 운영체제가 자원을 잘 분배해준다.
- Accounting
- 사용자가 얼마나 많이, 어떤 종류의 컴퓨터 자원을 사용하고 있는지를 지속적으로 추적해야 한다.
- Protection and Security
- 다중 사용 혹은 네트워크 컴퓨터 시스템에 저장되어 있는 정보의 소유자는 정보를 사용하거나 프로세스를 수행할 때 다른 사용자의 방해를 받지 않아야 한다. 보호(Protection)는 시스템 자원에 대한 모든 접근이 통제되어야 함을 보장하는 것을 포함한다.
10. System Boot
- booting : kernel을 load하여 system 시작
- system에서 전원이 초기화되면 초기 부트스트랩 프로그램(bootstrap loader)이 있는 고정 메모리 위치(ROM)에서 실행이 시작
- Sometimes two-step process
- Simple bootstrap loader 디스크에서 more complex boot program을 가져옵니다.
- Boot program loads the kernel.
- 대용량 OS(예: Windows, Mac OS X, UNIX)의 경우
- Bootstrap loader (ROM에서)는 진단(즉, POST(Power-On-Self Test))을 실행하며 디스크에 고정된 위치에서 단일 블록(예: MBR)을 읽고 코드를 실행할 수 있는 코드를 가지고 있다.
- The program in boot block은 주소 및 길이 정보를 기반으로 전체 OS를 로드하거나 디스크에서 bootstrap program의 나머지를 읽는다.
11. Operation System Structure
현대 운영체제는 계층을 나눠서 시스템을 관리한다.
Operating System Structure (UNIX)
- Systems programs
- The kernel: 여기서 기능 제공
- system-call interface 아래 부터 physical hardware 위까지 구성되어 있는 모든것을 가리킴
- 파일 시스템, CPU 스케줄링, 메모리 관리 및 기타 운영 체제 기능을 제공합니다.
Operating System Structure (Microkernel)
- kernel 에서 user space로 이동
- 메세지 전달을 사용하여 사용자 모듈 간의 통신이 이루어짐
- Benefit
- micro kernel 을 확장 하기 더 쉬움
- os를 new architecture로 쉽게 이동 가능
- 신뢰성과 안정성
- Detriments
12. Virtual Machines (VM)
Native VM vs Hosted VM
-
Native VM
- Virtual machine monitor runs directly on bare-machine
-
Hosted VM
- Virtual machine monitor or machine emulator runs on host OS (e.g.,Vmware workstation, MS’s Virtual Server, VirtualBox, Bochs, QEMU etc.)