기록하는 습관을 들이자

[ 운영체제 정리 ] 3장 컴퓨터 시스템의 동작 원리 - 운영체제와 정보기술의 원리 본문

운영체제

[ 운영체제 정리 ] 3장 컴퓨터 시스템의 동작 원리 - 운영체제와 정보기술의 원리

myeongmy 2020. 9. 3. 23:11
반응형

 

※ 해당 포스팅은 이화여대 반효경 교수님 저서 [운영체제와 정보기술의 원리] 책 내용을 기반으로 작성되었습니다.

 

1. 컴퓨터 시스템의 구조

 

컴퓨터 시스템의 구조는 컴퓨터 내부장치인 CPU, 메모리와 컴퓨터 외부장치인 디스크, 키보드, 프린터 등의 장치로 구성된다.

메모리 및 각종 입출력장치 등의 하드웨어 장치에는 각 장치에 관한 업무를 처리해주는 CPU인 컨트롤러가 존재.

 

2. CPU 연산과 I/O 연산

 

CPU 연산과 I/O 연산은 수행되는 곳이 서로 다르기 때문에 동시에 수행될 수 있다. I/O 연산은 입출력 장치에 붙어있는 컨트롤러가 해당 입출력 장치로부터 데이터를 읽어와 컨트롤러에 내장된 로컬 버퍼에 데이터를 임시로 저장하는 일이고, CPU 연산은 CPU가 주어진 작업을 수행하는 일이므로 독립적인 일이다.

단, 컨트롤러가 주어진 I/O 작업을 다 완료한 후에는 CPU에게 이를 통보하기 위해 인터럽트를 건다.

 

3. 인터럽트의 일반적 기능

 

운영체제의 커널에는 인터럽트가 들어왔을 때 해야할 일이 미리 다 프로그래밍 되어 보관되어 있다. 운영체제 커널 내에 있는 인터럽트 처리루틴은 다양한 인터럽트에 대해 각각 처리해야할 업무를 정의하고 있다.

 

※ 인터럽트의 종류

- 하드웨어 인터럽트 : 컨트롤러 등 하드웨어 장치가 CPU의 인터럽트 라인을 세팅

- 소프트웨어 인터럽트 : 소프트웨어가 인터럽트 라인을 세팅 ex> 예외 상황, 시스템 콜(system call)

  (예외 상황: 사용자 프로그램이 0으로 나누는 연산 등 비정상적인 작업을 시도 or 권한이 없는 메모리 영역 접근 시도 등)

  (시스템 콜 : 특권 명령에 해당. 입출력 명령은 특권 명령에 해당하여 사용자 프로그램이 실행하지 않고 CPU 제어권이 운영체제에게 넘가서 운영체제 커널 내의 코드로 실행된다.)

 

인터럽트가 발생하면!

CPU 제어권은 운영체제에게 넘어가게 되고 해당 인터럽트 처리루틴을 찾아가기 위해 인터럽트 벡터를 살펴본다. 인터럽트 벡터는 해당 인터럽트의 종류에 대한 번호와 해당 루틴이 저장된 주소를 가지고 있다.

 

4. 인터럽트 핸들링

 

인터럽트 핸들링(interrupt handling)이란?

인터럽트가 발생한 경우에 처리해야 할 일의 절차.

 

ex> 프로그램 A가 실행되고 있을 때 인터럽트가 발생한 경우

: A의 현재 상태(현재 CPU에서 실행 중인 명령의 메모리 주소, 처리중이던 CPU 내의 레지스터 값들)를 저장

 (어디에 저장? 운영체제는 각각의 프로그램마다 PCB(Process Control Block)을 가지고 있기에, 여기에 저장)

 그리고 인터럽트 처리루틴을 실행하고 나면 저장된 상태를 PCB로부터 CPU 상에 복원해 인터럽트 당하기 직전의 위치부터 실행이 이루어지게 된다.

 

5. 입출력 구조

 

동기식 입출력 vs 비동기식 입출력

동기식 입출력? 어떤 프로그램이 입출력 요청을 했을 때 입출력 작업이 완료된 후에야 그 프로그램이 후속 작업을 실행. 따라서, 어떤 프로그램에 입출력 작업이 존재하는 경우 시스템 콜로 해당 컨트롤러에게 작업을 요청한 뒤 CPU는 다른 프로그램에게 이양되어 CPU가 계속 쉬지 않고 일을 할 수 있도록 관리한다. (이 때, 운영체제는 입출력 중인 프로그램의 경우에는 blocked state로 전환시켜 놓는다. blocked state 프로그램에게는 CPU를 할당하지 않는다) 컨트롤러가 완료했다고 인터럽트 걸면 blocked state 해제!!

-> 다수의 프로그램이 동시에 입출력 연산을 요청하는 경우 동기성(synchronization)을 보장하기 위해 장치마다 큐를 두어 요청된 순서대로 컨트롤러가 일을 처리

 

비동기식 입출력? 입출력 연산을 요청한 후에 연산을 끝나기만을 기다리는 것이 아니라 CPU 제어권을 입출력 연산을 호출한 그 프로그램에게 바로 다시 부여하는 방식.

 

일반적으로는 동기식 입출력이 더 많이 사용된다.

 

6. DMA(Direct Memory Access)

 

원칙적으로 메모리는 CPU만이 접근할 수 있는 장치이다. 따라서 CPU 외의 장치가 메모리의 데이터에 접근하기 위해서는 CPU에게 인터럽트를 발생시켜 로컬버퍼의 내용을 메모리로 옮기는 작업을 수행했다. -> 그런데 메모리에 접근해야할 때마다 인터럽트를 발생시키면 CPU의 효율이 너무 떨어지지 않을까? DMA 컨트롤러의 탄생 배경!

 

DMA 컨트롤러

CPU가 입출력 장치들의 메모리 접근 요청에 의해 자주 인터럽트 당하는 것을 막아주기 위한 역할. 로컬버퍼에서 메모리로 데이터를 읽어오는 작업을 CPU가 아닌 DMA가 대행한다. DMA는 바이트(byte) 단위가 아니라 블록(block) 단위로 데이터를 읽어온 후에 CPU에게 인터럽트를 걸어 메모리에 데이터를 입력한다.

 

7. 저장장치의 구조

 

주기억장치 : 메모리(RAM) - 휘발성

보조기억장치 : 하드디스크, CD, 마그네틱 테이프 등 - 비휘발성

(보조기억장치의 역할: 전원이 나가도 유지해야할 정보 저장, 스왑 영역)

 

8. 하드웨어의 보안

 

현대 운영체제는 여러 프로그램이 동시에 실행되는 다중 프로그래밍 환경에서 동작하기에 한 프로그램이 다른 프로그램의 실행을 방해하거나 프로그램 간의 충돌을 일으키는 문제를 막기 위해 하드웨어에 대한 보안 기법이 필요!

 

커널 모드 : 운영체제가 CPU의 제어권을 가지고 운영체제 코드를 실행하는 모드. 이 모드에서는 모든 종류의 명령 수행 가능!

사용자 모드 : 일반 사용자 프로그램이 실행되며, 제한된 명령만 수행 가능!

 

CPU 내부의 mode bit- 모드비트 0 : 커널 모드로서 모든 명령 수행 가능- 모드비트 1 : 사용자 모드로서 제한된 명령 수행 가능

 

사용자 프로그램이 디스크에 저장된 파일에 자유롭게 접근이 가능하다면 보안상 문제가 발생할 수 있기에 입출력 명령은 특권 명령으로 지정되어 운영체제가 이를 대신해서 수행하게 한다.

 

9. 메모리 보안

 

메모리의 경우에도 보안이 필요하다. 사용자 프로그램이 운영체제 커널의 주소 공간에 접근하거나 다른 사용자 프로그램의 주소 공간에 접근해서는 안되기 때문이다. -> 이를 해결하기 위해 2개의 레지스터를 사용한 주소 범위 체크!

 

기준 레지스터(base register)와 한계 레지스터(limit register)

기준 레지스터 : 어떤 프로그램이 실행되는 동안 그 프로그램이 합법적으로 접근할 수 있는 메모리 상 가장 작은 주소(시작 주소)한계 레지스터 : 해당 프로그램의 크기

 

즉, 메모리 접근 연산이 있을 때마다 주소 범위가 합법적인 범위에 있는지를 체크한다. 만약 불법적인 접근이라면 예외 상황으로 판단해 소프트웨어 인터럽트가 발생하게 되고 해당 프로그램은 운영체제에 의해 종료된다.

 

메모리 접근 연산은 사용자 프로그램이 실행할 수 있는 연산이기에 특권 명령은 X -> 하지만, 합법적인 주소 범위에 해당하는지 체크해 메모리를 보호하고자 하는 것이다.

 

10. CPU 보호

 

특정 프로그램이 CPU를 독점해 무한 루프를 수행하는 등 CPU 사용 권한을 독점하는 일을 사전에 방지해야 한다. -> 타이머(timer)

 

타이머는 정해진 시간이 지나면 인터럽트를 발생시켜 운영체제가 CPU 제어권을 획득하도록 해준다.(타이머 인터럽트 처리루틴: 현재 독점중인 프로그램에게 CPU 제어권을 빼앗아 다른 프로그램에게 이양해준다.)

반응형
Comments