코학다식
[OS] 운영체제의 구조와 운영체제 보호를 위한 작업들 본문
Operating System
chapter 1-2 (2)
스토리지 계층
- 스토리지 시스템은 계층적으로 정리되어 있다. (속도, 비용, 휘발성 등으로 구분될 수 있음)
Caching
-
메인 메모리에 접근하는 데에는 시간이 소요되기 때문에, 최근 접근한 데이터를 가지고 있는 빠른 속도의 메모리를 CPU와 메인 메모리 사이에 둔다. 이것이 캐시(Cache)이다.
-
주로 S램을 사용한다.
-
스토리지 계층에 의해 같은 데이터가 여러 곳에 존재하는 등의 Consistency 문제가 발생할 수 있다. 특히 여러 사용자가 사용할 경우 이는 더 문제가 될 수 있다.
-
이러한 문제를 예방하기 위해 Cache management policy를 필요로 한다.
디스크에서 레지스터로의 이동
-
멀티태스킹(Multitasking) 환경은 가장 최신의 값이 스토리지 계층에 저장되어 있더라도 사용하는 데에 주의가 필요하다.
-
멀티프로세서(Multiprocessor) 환경은 모든 CPU가 그들의 캐시에 가장 최근의 값을 가지고 있도록 하드웨어에서의 캐시 일관성을 제공해야 한다.
-
분산 환경에서는 이러한 문제가 더 복잡해질 수 있다.
DMA(Direct Memory Access) 구조
이전 글에서 (I/O) device controller는 CPU에게 interrupt를 보낸다고 했는데, 만약 이 device의 처리 속도가 무척 빠르다면 어떤 일이 발생할까? 끊임없이 CPU에게 interrupt를 보내면서 CPU가 다른 일을 할 수 없도록 만들 것이다. 이런 문제를 DMA 구조가 해결할 수 있다.
- DMA 구조는 메모리 스피드에 가깝게 정보를 전송하는 빠른 속도의 I/O device들을 위해 사용된다.
- Device controller는 버퍼 스토리지에서 CPU의 중재 없이 데이터 블록을 바로 메인 메모리에 전송한다.
- Byte마다 interrupt가 발생되는 게 아니라, 한 블록마다 interrupt가 발생된다.
운영체제의 구조 (1)
과거의 운영체제는 한 사용자가 한 프로그램을 끝낸 후 다른 프로그램을 운영체제에 올린 뒤 명령을 수행하는 구조였는데, 이러한 구조는 비효율적이었다. 그래서 현재 대부분의 운영체제들은 효율성을 위해 멀티프로그래밍(Multiprogramming)이 가능한 구조로 되어 있다. 이 구조는 운영체제에 여러 개의 프로그램을 올려 두고 작업을 한다.
-
하나의 사용자로는 CPU와 I/O device들을 바쁘게 동작하도록 할 수 없다.
-
멀티프로그래밍은 작업들(코드와 데이터들)을 정리해서 CUP가 언제나 실행할 한 작업을 가지고 있도록 한다.
-
시스템에 있는 모든 작업의 부분 집합은 메모리에 존재한다.
-
job scheduling을 통해 하나의 작업이 선택되고 실행된다.
-
그 작업이 대기 중이어야 할 때 (가령, I/O) 운영체제는 다른 작업으로 바꾼다.
운영체제의 구조 (2)
-
Timesharing(multitasking)은 사용자가 각각의 작업들이 수행되는 동안에 interact할 수 있도록 CPU가 자주 작업을 바꾸는 논리적 확장이다. 이로 인해 interactive computing이 가능해진다.
-
각각의 사용자는 메모리에서 실행되는 적어도 하나의 프로그램을 가진다. → Process
-
만약 여러 작업이 수행될 준비가 동시에 된 경우 → CPU scheduling
-
만약 프로세스들이 메모리에 맞지 않으면, swapping이 그들을 이동시키며 동작한다.
Swapping이란 메인 메모리와 디스크 사이에서 프로그램이 이동하는 걸 말한다.
-
-
Virtual memory는 완전히 메모리에 있지는 않은 프로세스들의 실행을 가능하게 한다.
Virtual memory의 컨셉은 디스크를 메모리로 보는 것이다. 모든 프로그램이 메모리 상에 있어야 할 이유는 없다.
운영체제 보호 작업
- 이중 모드 작업
-
이중 모드(Dual-mode) 작업은 다른 시스템 구성요소와 운영체제를 분리하여 운영체제를 보호하게 한다.
-
사용자 모드(User mode)와 커널 모드(kernel mode)가 있다.
커널 모드는 supervisor mode, system mode, privileged mode라고도 불린다.
-
-
- mode bit는 시스템이 사용자 모드 또는 커널 모드로 작동될 때 둘을 구별할 수 있게 한다.
- 어떤 명령어들은 privileged로 지정되어, 오직 커널 모드에서만 실행 가능하다.
- 가령, 시스템 콜(system call)은 모드를 커널로 바꾸고, 리턴하면서 사용자 모드로 전환된다.
하드웨어에 의해 Mode bit가 제공된다.
- I/O 보호
- 모든 I/O 명령은 privileged 명령이다.
- 명령이 수행되면서, interrupt가 발생하고 interrupt에 의해 interrupt vector table에 접근할 때, 사용자 프로그램이 vector의 해당 주소를 사용자 프로그램으로 변경하여 컴퓨터의 컨트롤을 얻을 위험이 있다.
- 따라서 사용자 프로그램이 컴퓨터의 컨트롤을 절대 얻을 수 없도록 해야 한다.
- 메모리 보호
- 적어도 interrupt vector나 interrupt service routine에 메모리 보호가 제공되어야 한다.
- 이는 다른 프로그램의 영역에 접근하지 못하게 하는 것이다. (메모리가 보호되지 못했을 때 일어나는 대표적인 현상이 segmentation fault이다.)
- 메모리 보호를 위해, 프로그램이 접근할 수 있는 주소의 범위를 결정하는 두 레지스터를 추가한다.
- Base register - 접근 가능한 가장 작은 물리적 메모리 주소를 가진다.
- Limit register - 범위의 크기를 저장한다.
- 정해진 범위 너머의 메모리는 보호된다.
- Timer
-
멀티태스킹(timesharing) 관리를 위함
-
타이머는 운영체제가 컨트롤을 유지하고 있음을 보장하기 위해 정해진 시간이 지나면 interrupt를 건다.
- 매 clock tick마다 타이머는 줄어든다.
- 타이머가 0이 되면, interrupt가 발생한다.
- 타이머와 관련된 table에 도달하면 프로그램 컨트롤을 가져올 수 있다.
-
타이머는 현재 시각을 계산하기 위해 사용되기도 한다.
-
load-timer는 privileged 명령이다.
c.f) watchdog timer for reliability; 무한 루프 등의 에러를 방지하기 위해 주기적으로 interrupt를 발생시켜 문제가 감지되면 reset을 실행한다.
'Fundamentals > OS' 카테고리의 다른 글
[OS] 프로세스 생성과 종료 (0) | 2019.09.26 |
---|---|
[OS] 프로세스와 프로세스 스케줄링 (0) | 2019.09.24 |
[OS] Boot, 운영체제의 구조, VM (0) | 2019.09.19 |
[OS] System Call (0) | 2019.09.17 |
[OS] 운영체제의 정의와 Interrupt (0) | 2019.09.08 |