1.
Operating System Structure
- Motivation
단일 사용자가 계속해서 I/O 디바이스와 CPU를 동시에 사용하는 것을 유지할 수 없음
-> CPU utilization 을 높이기 위해서 CPU를 쓰지 않을 때 최대한 사용하게 하자
- 멀티프로그래밍
- 멀티프로그래밍은 jobs(코드와 데이터)로 구성되어 있는데, CPU는 항상 한 job 밖에 실행하지 못함.
- 모든 job중에 일부를 메모리에 저장/적재 한다.
- 하나의 job을 선택해서 실행을 시키는데, 이때 job scheduling에 의해 실행된다.
- OS는 job이 I/O 등으로 인해 대기해야하면 다른 Job으로 스위칭을 수행한다.
#필기
- 멀티프로그래밍의 최초 동기는 CPU Utilization을 높이고자 하는데에서 시작을 했다. CPU가 무의미하게 대기하는 시간에 다른 프로그램을 실행시키는 방식을 채택하는 것이 시초였다.
- job은 쉽게, 프로그램을 나타내는 단위이다.
- total job은 disk에 적재를 해놓는데, disk에 두는 이유는 job이 매우 많은 경우에는 모두를 메인메모리에 수용할 수 없기 때문에 일부를 제외하고 disk에 저장을 해놓는다.
- 그 중에 일부(곧 시작할 것들)를 메모리에 적재를 한다.
- 스위칭을 하는 룰은 멀티프로그래밍의 개념을 생각하면 된다. 결국 CPU를 놀게 하지 않게 위함이 목적이다.
- 또, 멀티프로그래밍은 CPU를 사용 중간에 스위칭하지 않는다.
- 지금은 해당 방법을 사용하지 않고 time sharing(multi-tasking)을 사용한다. 스위칭 속도가 매우 빠르다.
2.
TimeSharing
- TimeSharing(multiTasking)
멀티프로그래밍의 논리적 확장으로, CPU가 주기적으로 job을 바꿔서 실행을 한다. 이때, 유저는 실행되고 있는 각각의 job들이 동시에 돌아가는 것처럼 느낄 수 있다.- 반응시간이 매우 짧아야하는데, 약 1초 이하여야한다.
- 각 사용자는 최소한 하나의 프로그램 실행을 메모리해서 한다.
- CPU scheduler는 job을 선택해서, 실행을 위한 대기를 시킴
#필기
- Timesharing을 사용하면 모든 프로그램이 동시에 돌아가는 것처럼 느껴진다.
- 이전의 내용과 동일하게, job을 모두 메인 메모리에 적재하기 어려운 경우가 있기 때문에 일부를 제외하고 Disk에 적재한다.
- 메인 메모리에는 곧 실행할 job들을 적재를 하고, CPU에는 실행할 job을 올린다.
- 해당 구조들을 job pool(혹은 job queue), ready job(혹은 ready queue)라고 말한다.
- job pool(disk)에서 메모리로 적재하는 것은 job scheduler에 의해 적재가 이루어지고, CPU로 적재하는 것은 cpu scheduler에 의해 적재가 된다. 각각은 다른 스케쥴러이다.
3.
Virutal Memory
메모리 부족 해결 테크닉
- 메인 메모리는 멀티프로그래밍/멀티테스킹시스템에서 모든 프로세스를 실행하기에 충분하지 않은 문제가 있다.
- 해결책
- Swapping
메모리에 컨텐츠를 넣었다, 뺐다 하면서 실행시킴 - Virtual memory
전체가 아닌 일부를 메모리에서 실행이 되게 허용하는 기술
- Swapping
#필기
- Swapping은 통째(전체 프로세스 단위)로 이루어 진다.
- Swapping에 추가적인 테크닉(더 작은 단위의 블럭으로 소분, 주소 변환기법을 적용)하면 Virtual memory 라고 함
- 더 정확히는, swap block을 더 잘게 쪼개서 멀티테스킹에 필요한 영역만 올리고 실행시키는 것이 VM technic 이다.
4.
Operating System Operations
운영체제의 동작
- 현대의 운영체제는 인터럽트 제공방식의 프로그램이다.
- 인터럽트에 의해 이벤트가 표지되며, 인터럽트는 인터럽트핸들러에 의해 처리가 된다.
- 여러개의 프로그램이 H/W와 S/W 자원을 공유하고 있다.
-> 문제점, 어떠한 프로세스에서 발생한 에러가 전체 시스템의 충돌을 시킬 수가 있음
- 다중 사용자 운영체제의 필수요소(조건) : 한 프로그램의 에러는 반드시 다른 프로그램에 영향을 미치지 않아야 한다.
- Dangerous(priviliged) instructions -> Dual mode operation
- Maintaining control over CPU(CPU 독점): 한 사용자의 프로세스의 과하게 긴 실행을 방지 -> Timer
#필기
- 여러개의 프로그램이 컴퓨터의 RSS를 공유하고 있는 상황에서, 한 프로그램에서 일어난 에러가 자원을 공유하고 있는 다른 프로그램 혹은 전체 프로그램에 피해/영향을 입히지 않아야한다.
- 해당 부분은 2가지의 문제가 있는데, 어떠한 한 프로그램이 위험한 명령어를 사용하거나, 혹은 CPU time을 과도하게 사용하는 것이다.
- 위험한 명령어는 dual mode operation을 통해 자격이 있는 mode에서만 해당 명령어가 수행 가능하게 한다.
- CPU 점유 문제는 timer라는 하드웨어 장치-타임키퍼-를 두어 해결을 한다.
- 타임 키퍼는 CPU time에서 시간제한을 해주는 친구이다. (cf, CPU clk와는 다르다.)
- tjfwjd gn interrupt를 날리는 H/W이다.
5.
Dual-mode Operation
- User mode
- 유저가 정의한 코드(어플리케이션) 운용
- 다른 시스템이나 프로그램에 해를 끼칠 수 있는 Privileged 명령어는 보호되어 사용할 수가 없음
- I/O 명령어, timer 설정 명령어
- Priviledged 명령어는 오직 OS sys call을 통해서 해결을 할 수 있다.
- Kernel mode (or supervisor, syste privileged)
- OS 코드가 운용됨
- Priviledged 명령어가 허용이 된다.
#필기
- dual mode는 privileged 명령어를 실행할 수 있냐 없냐로 나뉜다.
- 유저모드에서는 안전한 명령어만 실행이 가능하고, Priviledged 명령어를 실행해야하는 경우 오직 sys call을 통해 OS에게 위탁하여 사용을 할 수 있다.
- 더하기, 곱하기, 사칙연산, 메모리 읽기/쓰기 등은 모두 안전한 명령어이다. 잘못된 연산이나 메모리 쓰기가 이루어지는 경우에 하드웨어와 운영체제가 계속 감시하고 있기 때문에 안전하다고 한다.
- Interrupt Handler의 명령은 privileged 명령이기 때문에 mode bit가 0이 되어야 한다.
6.
dual-mode operation의 장점
- 모드 위반 에러가 H/W에 의해 감지될 수 있고, OS에 의해 처리될 수 있다.
- 시스템 종료 없이 비정상 종료(abnormal termination)
- 에러 메세지
- 메모리 덤프 파일
#필기
- 덤프는 메모리의 상태를 저장하는 것이다. 디버깅으로 왜 죽었는지 알기 위한 목적을 가지고 있다.
7.
Timer
- 운영체제가 계속해서 CPU의 통제를 유지할 수 있도록 보장해줘야 한다.
- 어떠한 사용자 프로그램이 무한루프에 빠지거나, 서비스 도중에 죽어버려서 가져간 권한을 운영체제에 돌려줄 수 없는 경우가 생길 수 있다.
- Timer
- 일정 주기 이후에 컴퓨터에 인터럽트를 보낼 수 있다.
- 해당 주기는 고정되거나 유동적일 수 있다.
- 변동주기 타이머는 보통 고정된 클락 혹은 카운터에 의해 구현이 된다.
- 운영체제는 카운터를 설정한다.
- 매 시간마다 클럭이 째깍거리고, 카운터가 감소한다.
- 카운터가 0이 되면, 인터럽트가 발생
#필기
- 타이머는 정말 운영체제에 매우 중요하다.
- 컴퓨터에는 시계가 3개가 있는데 CPU clk, timer, real time clk(진짜 시계)이다.
- 타이머는 일정시간 이후에 인터럽트는 발생시키는 하드웨어 ㅇㅣ다.
- 어떤 프로그램이 실행 중에 무한 루프에 빠져버리면 자발적으로 CPU내놓지 않는 문제가 있다.
- Timer를 설정하는 명령은 Privileged 명령이다.
8.
타이머의 동작
- 프로그램의 과도하게 긴 실행을 방지
- OS가 유저프로세스에게 컨트롤을 넘기기 전에, 타이머가 설정된 시간 이후에 인터럽트가 발생하도록 설정이 된다
- 타이머의 인터럽트가 발생하면, 운영체제는 다시 컨트롤을 가져오고, 각 케이스에 대한 처리를 수행한다.
!! 타임 카운터는 오직 privileged 명령어에 의해만 조정될 수 있다.
#필기
- 이런 과정이 스케쥴러의 시작점이다. 즉, 스케쥴러를 활성화시키는 굉장히 중요한 component가 타이머이다.
- 타이머에 의해서 CPU를 뺏긴 프로세서는 저장되어 다음 실행때 끊긴 지점부터 다시 시작한다.
9.
Multi-Mode Operation
- 인텔프로세서의 경우 4개의 프로텍션 링을 가지고 있다.
- 0번 링의 경우 커널 모드이고,
- 1번과 2번링은 드물게 사용되는데, 보통 가상머신 운용에서 사용이 된다.
- 3번링은 유저모드를 뜻한다.
- ARMv8 시스템은 7개의 모드를 가지고 있다.
'무제 메모장' 카테고리의 다른 글
1.5 Core components of OS (0) | 2021.04.11 |
---|---|
1.3 Computer System Architecture (0) | 2021.04.09 |
1.1 Chain of Responsibility Pattern (0) | 2021.04.06 |
4.1 Socket Communication Test (0) | 2021.04.06 |
1.2 Computer system organization and operation (0) | 2021.03.16 |