728x90
1. 컴퓨터 시스템의 구조
- 컴퓨터 시스템은 컴퓨터 내부장치인 CPU, 메모리와 컴퓨터 외부장치인 디스크, 키보드, 마우스, 모니터, 네트워크 장치 등으로 구성된다.
- 입력 : 컴퓨터 내부로 데이터가 들어오는 것
- 출력 : 컴퓨터 외부 장치로 데이터가 나가는 것
- 컴퓨터는 외부장치의 데이터를 입력받아 각종 연산을 수행한 후 그 결과를 출력한다.
- 컴퓨터 외부장치는 입출력 장치라고도 부른다.
- 디스크 역시 디스크에서 내용을 읽어 컴퓨터에서 연산을 한 뒤 디스크에 데이터를 저장한다면 컴퓨터 입장에서 입출력이 일어난 것으로 볼 수 있다.
2. CPU 연산과 I/O 연산
- 입출력 장치들의 I/O 연산은 입출력 컨트롤러가 담당하고, 컴퓨터 내 연산은 메인 CPU가 담당하므로 동시 수행이 가능하다.
- 로컬 버퍼(local buffer) : 장치 컨트롤러가 입출력되는 데이터를 임시 저장하기 위한 작은 메모리
- 입출력 장치에서 데이터를 읽어오는 경우 컨트롤러가 로컬 버퍼에 데이터가 임시로 저장한 뒤 메모리에 전달된다.
- 메모리에 전달할 때 장치에 있는 컨트롤러가 인터럽트를 발생시켜 CPU에 보고한다.
- CPU는 명령 하나를 수행할 때마다 인터럽트가 발생했는지 확인하고 인터럽트가 발생한 경우 하던 일을 잠시 멈추고 인터럽트 처리루틴을 수행한다.
3. 인터럽트의 일반적 기능
- 운영체제는 각종 하드웨어 및 소프트웨어 자원 관리뿐만 아니라 인터럽트 처리루틴과 같이 사용자 프로그램에 필요한 서비스도 제공한다.
- 인터럽트 처리루틴의 예시로 디스크 컨트롤러가 인터럽트를 발생시키면 CPU는 디스크의 로컬 버퍼에 있는 내용을 사용자 프로그램의 메모리로 전달하고, 해당 프로그램이 CPU를 할당받을 경우 다음 명령을 수행할 수 있음을 표시하는 코드를 실행한다.
- 인터럽트 벡터 : 인터럽트 종류마다 번호를 정해 번호에 따라 처리해야 할 코드가 위치한 부분을 가리키고 있는 자료구조. 실제 처리해야 할 코드는 인터럽트 처리루틴, 또는 인터럽트 핸들러라고 불리는 다른 곳에 정의된다.
- 운영체제는 인터럽트를 처리 전에 수행 중이던 작업에 대한 정보를 저장하기 위한 장소를 별도로 가지고 있다.
- 인터럽트에는 하드웨어 인터럽트와 소프트웨어 인터럽트가 있다.
- 하드웨어 인터럽트 : 컨트롤러 등 하드웨어 장치가 CPU의 인터럽트 라인을 세팅한다.
- 소프트웨어 인터럽트(트랩) : 소프트웨어가 CPU의 인터럽트 라인을 세팅한다. 예외상황(exception)과 시스템 콜(system call)이 대표적인 예시다.
- 예외상황 : 비정상적인 작업을 시도하거나, 자신의 메모리 영역 바깥에 접근하려는 시도 등 권한이 없는 작업을 시도할 때 이에 대한 처리를 위해 발생시키는 인터럽트
- 시스템 콜 : 사용자 프로그램이 운영체제 내부에 정의된 코드를 실행하고 싶을 때 운영체제에 서비스를 요청하는 방법. 즉, 운영체제 커널에 있는 코드를 사용자 프로그램이 실행하고 싶을 때 사용한다. 프로그램 작성 중 키보드 입력이나 화면 출력 등의 입출력 작업이 필요할 경우 이를 활용하면 입출력을 수행하는 코드를 직접 작성할 필요가 없게 된다.
4. 인터럽트 핸들링
- 인터럽트 핸들링 : 인터럽트가 발생한 경우에 처리해야 할 일의 절차
- 프로세스 제어블록(Process Control Block: PCB) : 현재 시스템 내에서 실행되는 프로그램들을 관리하기 위한 자료구조
- PCB는 각 프로그램 당 하나씩 존재하고 해당 프로그램의 어느 부분이 실행 중이었는지를 저장하고 있다. 구체적으로는 프로그램이 실행 중이던 코드의 메모리 주소와 레지스터값, 하드웨어 상태 등이 저장된다.
- 어떤 프로그램이 실행되던 중 인터럽트 발생 시 그 프로그램의 실행 상태를 PCB에 저장하고 CPU는 인터럽트 처리루틴을 수행한다. 이후 인터럽트 처리가 끝나면 저장된 상태를 PCB로부터 CPU 상에 복원해 다시 프로그램을 실행한다.
- 오늘날의 컴퓨터에서 운영체제는 인터럽트가 발생할 때만 실행된다.
5. 입출력 구조
- 입출력 방식에는 동기식 입출력과 비동기식 입출력이 있다.
- 동기식 입출력(synchronous I/O) : 어떤 프로그램이 입출력 요청을 했을 때 입출력 작업이 완료된 후에야 후속 작업을 수행할 수 있는 방식. 입출력이 완료될 때까지 CPU에서 대기하고 있기 때문에 자원의 낭비가 초래된다.
- 그래서 일반적으로 프로그램이 입출력을 수행 중인 경우 CPU를 다른 프로그램에게 이양한다. 그리고 입출력 중인 프로그램을 봉쇄 상태(blocked state)로 전환시킨다. 봉쇄 상태의 프로그램에게는 CPU를 할당하지 않고, CPU 할당 시 곧바로 명령을 수행할 수 있는 프로그램에만 CPU를 할당한다.
- 동기식 입출력에서는 입출력 요청의 동기화를 위해 장치별로 큐(queue)를 두어 요청한 순서대로 처리할 수 있도록 한다.
- 입출력이 완료되면 컨트롤러가 CPU에게 인터럽트를 통해 알리며 이때 운영체제 커널은 입출력 연산이 끝난 프로그램이 CPU를 할당받을 수 있도록 그 프로그램의 상태를 봉쇄 상태로부터 해제시킨다.
- 비동기식 입출력(asynchronous I/O) : 입출력 연산을 요청한 후에 연산이 끝나기를 기다리지 않고 CPU의 제어권을 입출력 연산을 호출한 그 프로그램에게 곧바로 다시 부여하는 방식
- 입출력 결과와 관계없이 실행 가능한 작업이 있는 경우 이를 먼저 실행하고, 입출력 요청이 완료되면 입출력 데이터가 필요한 작업을 마저 수행한다.
6. DMA
- 원칙적으로 메모리는 CPU에 의해서만 접근할 수 있는 장치이기 때문에 외부 장치에서 메모리 접근 연산을 할 때마다 인터럽트를 발생시켜야 하고, 이 때문에 CPU 사용의 효율성이 떨어질 수 있다.
- DMA(Direct Memory Access) : 위와 같은 비효율을 해결하기 위해 만든 CPU 이외에 메모리 접근이 가능한 장치. 일종의 컨트롤러로 CPU가 입출력 장치들의 메모리 접근 요청에 의해 인터럽트 당하는 것을 막는 역할을 한다.
- DMA를 사용하면 로컬 버퍼에서 메모리로 읽어오는 작업을 DMA가 대신 한다.
- DMA는 byte 단위가 아니라 블록(block)이라는 큰 단위로 정보를 메모리로 읽어오고 CPU에게 인터럽트를 발생시켜 해당 작업의 완료를 알린다. 이러한 방식으로 CPU에 발생하는 인터럽트의 빈도를 줄여 CPU의 효율성을 높인다.
7. 저장장치의 구조
- 컴퓨터 시스템을 구성하는 저장장치는 주기억 장치와 보조기억장치로 나눌 수 있다.
- 주기억장치(메모리) : 전원이 나가면 저장된 내용이 모두 사라지는 휘발성의 RAM을 매체로 사용하는 경우가 많다.
- 보조기억장치 : 전원이 나가도 저장된 내용을 기억할 수 있는 비휘발성의 마그네틱 디스크를 주로 사용한다. 이 밖에도 플래시 메모리, CD, 마그네틱 테이프 등이 사용되기도 한다.
- 보조기억장치의 용도에는 파일 시스템용과 스왑 영역용이 있다.
- 파일 시스템용 : 전원이 나가도 유지해야 할 정보가 있을 경우 파일 형태로 보조기억장치에 저장한다.
- 스왑 영역용 : 크기가 한정된 메모리를 보완하기 위해 프로그램 수행에 당장 필요하지 않은 부분을 보조기억장치에 저장한다. 이처럼 디스크에 저장하는 일을 스왑 아웃시킨다고 말한다. 스왑 아웃된 부분이 필요하면 다시 메모리 영역으로 올린다. 보조기억장치의 비휘발성과는 거리가 있는 용도이다.
- 하드디스크 : 보조기억장치 중 가장 대표적인 저장매체로 여러 개의 마그네틱 원판들이 있고, 암(arm)이 이동하며 원판에 저장된 데이터를 읽고 쓰는 방식으로 동작한다. 디스크 원판의 표면은 트랙(track)으로 나뉘고, 각 트랙은 섹터(sector)로 나뉜다. 섹터에 최소한의 단위 정보가 저장된다.
8. 저장장치의 계층 구조
- 컴퓨터 시스템을 구성하는 저장장치는 빠른 저장장치부터 느린 저장장치까지 단계적인 계층구조로 이루어진다.
- 캐싱 기법 : 상대적으로 느린 저장장치에 있는 내용 중 당장 사용되거나 빈번히 사용될 정보를 빠른 저장장치에 선별적으로 저장함으로써 두 저장장치 사이의 속도를 완충시키는 방법. 이 방법이 효과적인 이유는 컴퓨터 내의 데이터나 프로그램 중 일부분만 집중적으로 사용되는 경우가 많기 때문이다.
9. 하드웨어의 보안
- 하드웨어적인 보안을 유지하기 위해 운영체제는 기본적으로 커널 모드와 사용자 모드를 지원한다.
- 커널 모드(kernel mode, system mode) : 운영체제가 CPU의 제어권을 가지고 운영체제 코드를 실행하는 모드. 이 모드에서는 모든 종류의 명령을 다 실행할 수 있다.
- 사용자 모드(user mode) : 일반 사용자 프로그램이 실행되며 제한적인 명령만 수행할 수 있다.
- 이를 통해 시스템에 중요한 영향을 미치는 연산은 커널 모드에서만 실행 가능하도록 해 하드웨어의 보안을 유지한다.
- 컴퓨터 시스템은 CPU 내부에 모드 비트(mode bit)를 두어 사용자 프로그램을 감시한다. 모드 비트가 0인 경우 커널 모드로서 모든 명령을 수행할 수 있고, 모드 비트가 1인 경우 사용자 모드로 제한된 명령만 수행할 수 있다.
- CPU는 보안과 관련된 명령(특권명령)을 수행하기 전에 항상 모드 비트를 조사해 그 값이 0인 경우에만 그 명령을 수행하고, 사용자 프로그램에게 CPU의 제어권을 넘기는 경우 모드 비트를 1로 세팅한다.
- 인터럽트가 발생하면 모드 비트는 자동으로 0이 세팅된다.
- 모든 입출력 명령은 특권명령으로 사용자 프로그램이 입출력이 필요한 경우에는 반드시 시스템 콜로 운영체제에 요청해야 한다.
10. 메모리 보안
- 사용자 프로그램이 다른 사용자 프로그램이나 운영체제가 위치한 메모리 영역을 침범하는 것을 막기 위해 기준 레지스터와 한계 레지스터를 사용한다.
- 기준 레지스터(base register) : 어떤 프로그램이 수행되는 동안 그 프로그램이 합법적으로 접근할 수 있는 메모리상의 가장 작은 주소를 보관한다.
- 한계 레지스터(limit register) : 어떤 프로그램이 기준 레지스터값부터 접근할 수 있는 메모리의 범위를 보관한다.
- 허용된 주소 영역 바깥의 주소에 접근하려고 할 시 예외상황, 즉 소프트웨어 인터럽트가 발생한다. 이로 인해 운영체제는 예외상황을 발생시킨 프로그램을 강제로 종료시킨다.
- 메모리 접근 연산은 사용자 프로그램이 CPU를 가지고 있는 동안 수행할 수 있는 연산이므로 특권명령은 아니다. 그러나 기준 레지스터와 한계 레지스터의 값을 세팅하는 연산은 특권명령이다.
11. CPU 보호
- CPU가 하나의 프로그램에 의해 독점되는 것을 막기 위해 운영체제는 타이머라는 하드웨어를 사용한다.
- 타이머(timer) : 정해진 시간이 지나면 인터럽트를 발생시켜 운영체제가 CPU의 제어권을 획득할 수 있도록 한다. 이때 발생한 인터럽트 처리루틴은 CPU를 점유하고 있는 프로그램을 종료시키고 다른 프로그램에게 CPU를 이양한다.
- 로드 타이머(load timer) : 타이머 값을 세팅하는 명령으로 특권명령에 속한다.
출처 : 운영체제와 정보기술의 원리
728x90
'운영체제' 카테고리의 다른 글
6. 메모리 관리 (0) | 2021.04.27 |
---|---|
5. CPU 스케쥴링 (0) | 2021.04.25 |
4. 프로세스 관리 (0) | 2021.04.24 |
3. 프로그램의 구조와 실행 (0) | 2021.04.23 |
1. 운영체제 개요 (0) | 2021.04.20 |