1.1 운영체제가 할 일
- 운영체제는 다양한 사용자를 위해 다양한 응용 프로그램 간의 하드웨어 사용을 제어하고 조종
- 컴퓨터 하드웨어를 관리하는 프로그램
- 응용 프로그램을 위한 기반을 제공
- 컴퓨터 사용자& 컴퓨터 하드웨어 사이에서 중재자 역할
Operating System Definition
- 유저 : program for ease of use and performance.
- System : program for resource allocation and control
- 자원 할당자(resource allocaation & control) 로서의 역할
- 모든 자원을 manage
- 효율적 자원 사용을 위한 결정을 내림
1.2 컴퓨터 시스템의 구성 (Computer System Organization)
- Computer-system operation
- One or more CPUs, device controllers connect through common bus
(address/data/control bus) providing access to shared memory.
- Each device is connected through a specific device controller.
- Concurrent execution of CPUs and devices competing for memory cycles.
- 현대의 범용 컴퓨터 시스템은
- 하나 이상의 CPU와 구성요소 &
- 공유 메모리 사이의 액세스를 제공하는 공통 버스(bus)를 통해 연결된 여러 장치 컨트롤러로 구성
- 각 장치 컨트롤러마다 장치 드라이버 有
- 장치 드라이버
- 장치 컨트롤러의 작동을 잘 알고 있고 나머지 운영체제에 장치에 대한 일관된 인터페이스(명세)를 제공
- 각 device controller (장치 컨트롤러)는 제어 담당
- device 만을 위한 버퍼메모리 가짐 <- device driver 라는 운영체제 의해 관리
- CPU는 메인메모리 값과 컨트롤러의 로컬 메모리 값을 서로 주고 받기 가능
- device controller 는 CPU와 데이터 전송을 interrupt 로 주고받음 (제어 주고받음)
- device controller 는 자신의 operation을 끝냈다는 것을
interrupt
통해서 CPU에게 알린다.
- CPU와 장치 컨트롤러는 병렬/동시동작(concurrent) 으로 실행되어 메모리 사이클을 놓고 경쟁
1.2.1 인터럽트 - Interrupt Handling
- 인터럽트 : 하드웨어가 운영체제에 보내는 전기적 신호(입출력이 대표적)
- 운영체제의 커널은 이 신호를 받아 그 상황에 따른 대처, 일을 처리
- 하드웨어는 어느 순간이든 시스템 버스를 통해 CPU에 신호를 보내 인터럽트를 발생시킬 수 있음
- CPU가 인터럽트 되면 CPU는 하던 일을 중단하고 즉시 고정된 위치로 실행을 옮김
- 이러한 고정된 위치는 일반적으로 인터럽트를 위한 서비스 루틴이 위치한 시작 주소를 가짐 & 인터럽트 서비스 루틴 실행
- 인터럽트 서비스 루틴이 실행이 완료 => CPU는 인터럽트 되었던 연산 재개
<인터럽트 연산의 시간 일정 - Interrupt Timeline (Single Process)>
- 하드웨어에서 물리적 전기신호의 형태로 발생
- 인터럽트 컨트롤러의 입력 핀으로 전달
- 컨트롤러는 프로세서에 전달
- 인터럽트를 감지한 프로세서는 진행중이던 일 중지
- 운영체제에 인터럽트 발생 전달
- 운영체제의 인터럽트 처리
- 중단되었던 프로세스 재개
- 장치 컨트롤러가 인터럽트 요청 라인에 신호를 선언하여
- 인터럽트를 발생(raise)시키고
- CPU는 인터럽트를 포착(catch)하여
- 인터럽트 핸들러로 디스패치(dispatch)하고
- 핸들러는 장치를 서비스하여 인터럽트를 지운다(clear).
=> 이 기본 인터럽트 기법은 비동기 이벤트에 CPU가 대응할 수 있게 함
Interrupt Handling (HW Perspective)
- Old : I/O devices have IRQ
- Advacned Features : PIR, MSI
Interrupt Handling (SW Perspective)
- Interrupt transfers control to the interrupt service routine (or interrupt handler), through the interrupt vector, which contains the addresses of all the service routines (generally stored in low memory)
- Interrupt handler is generally a part of the operating system
- Interrupt architecture must save the address of the interrupted instruction
- A trap (or an exception) is a software-generated interrupt caused either by an error or a user request
- 인터럽트는 모든 서비스 루틴의 주소를 포함하는 인터럽트 벡터를 통해 인터럽트 서비스 루틴(또는 인터럽트 핸들러)으로 제어 권한을 전송 (일반적으로 낮은 메모리에 저장됨)
- 인터럽트 핸들러는 일반적으로 운영 체제의 일부
- 인터럽트 아키텍처는 중단된 명령의 주소를 저장 NEEDED
- trap(또는 예외)는 오류 또는 사용자 요청에 의해 발생하는 소프트웨어 생성 인터럽트
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
1.2.2 저장장치 구조 (Storage Structure)
메인 메모리(Random-Access Memory : RAM)
- 휘발성 메모리 (VOLATILE)
- 용량 대비 가격 저렴, FAST
보조 저장장치
(+) 대부분의 프로그램은 메모리에 적재될 때까지 보조저장 장치를 사용 , 보조저장장치는 메인 메모리보다 훨씬느리기 때문에, 보조저장장치의 올바른 관리는 컴퓨터 시스템에서 매우 중요
- 비휘발성 (NON-VOLATILE)
- ① 하드 디스크 드라이브 (HDD)
- 마그네틱 디스크를 이용해서 데이터 읽어냄,
- 디스크 표면은 논리적으로 트랙으로 구분되며, 섹터로 세분화
- 디스크 표면은 논리적으로 트랙으로 구분되며, 섹터로 세분화
- ② SOLID STATE DISKS (SSD)
CACHING
- 메인메모리에 저장된 내용의 일부를 임시로 저장해두는 기억장치
MIGRATION of A from Disk to Register
=> CPU가 하나씩 불러와 옮기는 방법 : 너무 단순해서 CPU가 할 필요 없고, CPU 본업 챙기지 못할지도
- Multitasking : 메인메모리에 동시에 여러 프로세스가 올라가있는 환경
- 하나의 cpu가 여러 process 왔다갔다하는 환경에서는 가장 최신의 value 를 쓰는 것이 중요
- Multiprocessor environment : cache coherency 제공해야 함
- 변수 A 복사본이 여러 로컬캐시 저장 -> 동일성 보장 어려울지도
1.4 운영체제의 작동 (Operating-System Operations)
Direct Memory Access Structure (DMA)
- CPU 는 하던 일 계속하고, 다이렉트로 데이터를 옮기는 방식
- CPU 개입 없이 디바이스 컨트롤러는
- 버퍼 스토리지로부터 데이터를 메인메모리로 옮긴다.
1.4.1 Multiprogramming & Multitasking
Multiprogramming
- Multiprogramming : CPU가 항상 한 이상의 프로그램을 실행할 수 있도록하여 CPU 이용률을 높이고 사용자의 만족도를 높이는 프로그래밍
JOB SCHEDULING 에 의해 job 의 실행 순서와 형태를 잘 조직해 CPU가 항상 하나의 job을 실행할 수 있게 함
- 2개 이상의 작업을 동시에 수행하는 과정
- 운영체제는 여러 개의 작업을 메모리에 동시에 유지함으로서,
- 현재 실행중인 작업이 I/O를 할 경우, 다음 작업을 순차적으로 실행
- 여러 프로세스를 동시에 메모리에 유지
Multitasking (Time Sharing)
여러개의 task를 자주 번갈아가며 수행하다보니 사용자는 동시에 여러 task가 수행되고 있다고 느낌
- 다중 프로그래밍의 논리적 확장
- Timesharing (multitasking) : job이 실행중일 때라도 어떤 근거에 기반해 빠르게, 자주 교체해서 실행
=> 시간이 모두 끝나서 교체될 수도, 중간마다 교체될 수도 있음
- 프로세스 : 메모리에 탑제된 프로그램
- 여러개 준비되어 있으면 CPU 스케쥴링에 의해 해당 프로세스를 선택
- swapping : 메모리를 너무 많이 차지하면 외부로 내보내거나 가져오기도 함
- 가상메모리 (virtual memory) : 메모리에서 마무리되지 않은 process 의 수행을 허용
멀티 프로그래밍 (Multi-programming) VS 멀티 태스킹 (Multi-tasking)
✔️ 멀티 프로그래밍 (Multi-programming)
- 초기의 컴퓨터에서는 하나의 프로그램이 메모리에 올라가면 하나의 프로그램만 CPU가 처리를 진행할 수 있었음
- 이 과정에서 프로세서의 처리 속도와 입출력 속도 간의 차이로 인해, 입출력이 완료될 때까지 프로세서는 idle한 상태
- 따라서 이는 프로세서의 자원 낭비 !
프로세서가 입출력 작업의 종료를 대기할 동안 하나의 프로세서에서 다른 프로그램을 수행할 수 있도록 하는 것이 멀티프로그래밍이다.
✔️ 멀티 태스킹 (Multi-tasking)
- Task란 운영체제에서 처리하는 작업의 단위 또는 정해진 일을 수행하기 위한 명령어 집합을 뜻 (process 보다 확장된 개념)
- 멀티 태스킹은 task를 OS의 스케쥴링에 의해 task를 번갈아가며 수행하는 것
- 여러개의 task를 자주 번갈아가며 수행하다보니 사용자는 동시에 여러 task가 수행되고 있다고 느끼게 된다.
(+) Multiprocessor vs Multitasking
multitasking: 하나의 CPU가 여러개의 Process를 실행하는 것
Multiprocessor: 하나의 Computer안에 여러개의 CPU가 있는 것
❓ 멀티프로그래밍 vs 멀티태스킹
- 멀티 프로그래밍은 프로세서의 자원낭비를 막기 위함
- 멀티태스킹은 정해진 시간동안 각각의 task를 번갈아가며 수행하는 것
① Dual-Mode Operation
② I/O Protection
③ Memory Protection
④ Timer
① Dual-Mode Operation
- 운영체제는 적어도 두 개의 독립된 연산 모드 - 사용자 모드 & 커널 모드 필요!
- 이 모드 비트(mode bit)는 하나의 비트가 현재의 모드를 나타내기 위해 컴퓨터의 하드웨어에 추가 (커널 / 유저 구분시켜주는 코드)
- 운영체제를 위하여 실행되는 작업과 사용자를 위해 실행되는 작업을 구분 가능
- 즉, 사용자 Application이 운영체제로부터 서비스를 요청하면(시스템 콜) 이 요청을 수행하기 위해서는 사용자 모드에서 커널 모드로 전환
- 이중 모드는 잘못된 사용자로부터 운영체제를, 그리고 잘못된 사용자 서로를 보호하는 방법을 제공
② I/O Protection
- I/O(Port) Register들을 모두 Privileged Instruction으로 만들기
- I/O와 관련된 모든 함수들은 커널 내부로 들어가야 한다는 의미
③ Memory Protection
- 프로그램에서 메모리 보호를 위해서는 프로그램이 접근해야 하는 legal 주소 결정하는 두 register 사용
- (1) Base register
- 가장 작은 legal physical memory address
- (2) Limit register
④ Timer
- 타이머는 운영 체제가 제어 상태를 유지하도록 지정된 기간 후에 컴퓨터를 중단
os가 control을 지속한다는 것을 보장하기 위해 specified period 후 컴퓨터를 인터럽트 하도록 설정
- Timer is decremented every clock tick
- value 가 0이 되면 interrupt 발생
- 우리는 사용자 프로그램이 무한루프(infinite loop)에 빠지거나
- 시스템 서비스 호출에 실패하여, 제어가 운영체제로 복귀하지 않는 경우가 없도록 반드시 방지
=> 해당 목적을 달성하기 위해 타이머(Timer)를 사용
- Load-timer is a privileged instruction