▶ 컴퓨터 하드웨어는 – 프로세서(CPU), 메모리(RAM), 주변장치 로 구성되어 있다. -->모두 시스템 버스로 연결 되어있다.
※ 시스템 버스 : 하드웨어를 물리적으로 연결하여 서로 데이터를 주고 받을 수 있게 하는 통로.
데이터(워드 단위), 주소, 제어 신호등이 오간다.
※ 램(RAM) : 보조기억장치(HDD)의 느린속도와 CPU의 빠른 속도로 인한 병목 현상을 줄이기 위한 수단으로 탄생한 장치. 즉, CPU와 하드디스크 사이에 또 하나의 특별한 기억장치.
한 마디로 램은 컴퓨터의 주기억 장치로서 보조기억장치에 있는 데이터들을 불러와서 CPU가 작업할 수 있게 해준다.
1. [ CPU ( Processor ) aka. 중앙처리장치 ]
- 하드웨어 모든 장치의 동작을 제어하고 명령.
- 연산장치, 제어장치, 레지스터고 구성되고 이들은 내부 버스로 연결된다.
레지스터를 자세히 말하자면 다음과 같은 레지스터로 구성된다.
- PC ( 다음 명령어의 주소를 가지고 있다. )
- IR (명령어 레지스터:현재 실행할 명령어 보관),
- ACC ( 누산기: 계산한 결과를 잠시 동안 가지고 저장한다.)
- MAR(메모리 주소 레지스터) CPU가 참조하려는 데이터의 주소를 명시해 놓음.
- MBR(메모리 데이터 레지스터) CPU가 메모리에 읽거나, 저장할 데이터 자체를 보관.
2. [ 메모리 ]
a. 레지스터
- CPU 내부에 있으며, CPU가 사용할때 가장 빠른 메모리.
b. 캐시
- CPU와 메인 메모리 간의 속도차이를 보완하는 고속 버퍼.
- 메인 메모리에서 블록단위로 가져와 CPU에 워드 단위로 전달한다.
( 블록이 크면 hit율 증가, but 전송 부담과, 캐시 데이터 교체 작업이 빈번하게 발생 )
- cash hit / cash miss , 공간적 지역성 / 시간적 지역성.
c. 메모리(메인)
- CPU 외부에 있으며 , CPU에서 즉작적으로 수행할 프로그램과 데이터를 저장하거나 CPU에서 처리한 결과를 저장한다.
- DRAM을 많이 사용한다.
- CPU와 보조기억장치(Disk,HDD) 의 병목현상을 해소.
d. 보조기억장치
- CPU가 직접 접근 할 수 없다.
- 용도가 크게 두 가지 인데 파일 시스템 용과, 스왑 영역 용이다.
- 파일 시스템은 전원이 나가도 유지해야 할 정보들.
- 스왑 영역은 다수의 프로그램이 동시에 메모리에 올라가 수행되는데 메모리 용량 부족이 흔하게 발생한다. 이때 당장 필요한 부분만 메인메모리에 올려 놓고, 그렇지 않은 부분은 스왑영역에 내려 놓게 된다.
* OS는 virtual memory 방법으로 메인 메모리의 유효 크기를 늘릴 수 있다.
e. I/O 장치
- I/O 장치는 반드시 OS를 통해서 접근이 가능하다.
- 동기식 입출력(synchronous) 와 비동기식(asynchronous)가 있다.
동기식은 CPU가 입출력 장치에게 입출력을 요청했을 때 그 결과를 받을 동안 다음 명령을 수행하지 않고 기다린다. 그러다 입출력이 완료되고 인터럽트를 통해 그 사실이 전달된 후에야 CPU 제어권이 프로그램에게 넘어가서 다음 명령을 실행한다. 이렇게 되면 동기화는 이루어질 수는 있어도 CPU의 낭비가 발생한다. 이를 해결하기 위해 입출력이 수행되는 동안 다른 프로그램에게 CPU를 양도하게 된다. 이때 다수의 프로그램이 동시에 입출력 연산을 요청하는 경우 입출력 순서에 따라 값이 달라질 수 있기 때문에 장치마다 큐(queue)를 두어 순서대로 처리됨(동기성)을 보장한다. 컨트롤러가 큐를 관리하며 연산이 완료되면 인터럽트를 통해 CPU에게 알린다. 이 경우 운영체제 커널은 인터럽트 처리 루틴으로 가서 입출력 연산을 끝낸 프로그램이 CPU 할당을 받을 수 있도록 blocked 상태로부터 해제시킨다.
비동기식은 입출력 연산 요청한 후 연산이 끝나길 기다리지 않고, CPU 제어권을 입출력 연산을 호출한 그 프로그램에게 곧바로 다시 부여하는 방식이다. 입출력 연산의 값이 다음 수행할 명령과 관계가 없는 명령어들이 많은 프로그램에서 주로 사용하는 방식이다. 물론 비동기식 입출력에서도 입출력 연산이 완료되면 인터럽트를 통해 알려주고 그 시점부터 읽어온 데이터를 필요로 하는 명령을 수행할 수 있게 된다.
f. DMA
- 원칙적으로 메모리는 CPU에 의해서만 접근할 수 있는 장치이다. 따라서 CPU 외의 장치는 인터럽트를 발생시켜 CPU가 이를 대행하는 식으로만 가능한데, 이럴 경우 인터럽트가 너무 많이 걸릴 수 있기 때문에, CPU의 효율성이 떨어질 수 있다. 그래서 DMA(Direct Memory Access)라고 부르는 장치를 두어 해결한다. 일종의 컨트롤러로서 I/O 버퍼에서 메모리로 읽어오는 작업을 CPU가 아닌 DMA가 대행함으로써 CPU는 원래 하던 작업을 멈출 필요가 없는 것이다. DMA는 바이트 단위가 아니라 블록 단위라 큰 단위 정보를 메모리로 읽어온 후 인터럽트를 발생시켜서 해당 작업의 완료를 알려준다.
g. 하드웨어 보안
- 다중 프로그래밍 환경에서 보안을 유지하기 위해 운영체제는 커널모드(시스템모드)와 사용자모드를 두고 있다. 가령 어떤 사용자 프로그램에서 메모리 영역이나 파일 영역을 건드는 명령어를 수행할 때 CPU 제어권이 사용자 프로그램에게 있기 때문에 운영체제는 감시할 방법이 없게 된다. 이런 상황을 방지 하기 위에서 CPU내부에 모드(mode)bit를 둔다.
모드bit가 0이면 커널(시스템)모드 명령을 수행할 수 있고, 모드bit가 1이면 유저모드로서 제한된 명령어만을 수행할 수 있게끔 하는 것이다. 그리고 운영체제가 CPU를 점유하다가 사용자 프로그램에게 CPU 제어권을 넘겨줄 때 모드bit를 1로 세팅하고 넘겨준다. 마찬가지로 사용자 프로그램에서 시스템콜을 통해 인터럽트가 발생할 때 모드bit는 0으로 세팅되고 끝난 후에는 1로 만들어서 CPU를 넘겨준다. 모든 입출력 명령은 커널만 수행할 수 있는 특권명령이다.
h. 메모리 보안
어떠한 사용자 프로그램이 다른 사용자 프로그램이나 운영체제가 위치한 메모리 영역을 침범할 수 있기 때문에 적어도 인터럽트 벡터와 인터럽트 처리루틴이 있는 곳은 각별한 보안이 필요하다.
보안의 문제를 해결하기 위해 2개의 레지스터를 사용해서 프로그램이 접근하려는 메모리 부분이 합법적인지 체크한다. 기준 레지스터(base register) 와 한계 레지스터(limit register)이다.
기준 레지스터는 프로그램이 접근할 수 있는 메모리상의 가장 작은 주소를 보관하고 있고, 한계 레지스터는 그 프로그램이 기준 레지스터 값부터 접근할 수 있는 메모리 범위를 보관하고 있다. 즉 사용자 프로그램은 기준 레지스터 주소부터 한계 레지스터 값 사이의 주소 영역만 접근할 수 있다.
이 때 접근하려는 주소가 이 범위 안에 없으면 소프트웨어적 인터럽트가 발생한다.(Exception).
메모리 접근 연산은 사용자 프로그램이 사용 할 수 있는 연산으로 특권명령은 아니다. 그렇지만 올바르지 않은 접근 시도로부터 메모리를 보호하기 위해서는 기준 레지스터와 한계 레지스터의 값을 세팅하는 연산은 특권명령으로 규정 해야한다. 만약 프로그램이 자신의 기준 레지스터와 한계 레지스터의 값을 직접 변경할 수 있다면 메모리에 무제한 접근하는 것이 가능하기 때문이다. 따라서 운영체제가 2개의 레지스터값을 직접 세팅해주고 user 프로그램은 값을 변경할 수 없다.
후에 배울 페이징 기법은 좀 더 현실적인 메모리 관리 및 보호 기법이다.
i. CPU 보호
일반적으로 CPU는 하나 밖에 없기 때문에 특정 사용자 프로그램이 CPU를 독점해 무한으로 제어권을 가지고 있다면 다른 운영체제가 CPU를 빼앗을 방법이 없게 된다. 이를 방지하기 위해 타이머(timer)라는 하드웨어를 사용한다. 타이머는 정해진 시간이 지나면 인터럽트를 발생시켜 운영체제가 CPU의 제어권을 획득할 수 있도록 하는 역할을 수행한다. 여기서 타이머의 값을 세팅하는 명령을 load timer 명령이라고 하고 특권명령에 속한다. 또한 타이머는 시분할 시스템에서 현재 시간을 계산하기 위해서도 사용된다.
j. 시스템 콜을 이용한 입출력
- 사용자 프로그램이 디스크 파일에 데이터를 쓰거나 읽어온느 행위, 키보트로부터 입력을 받는 행위 등 모든 행위들은 특권 명령인 입출력 명령에 해당한다. 따라서 사용자 프로그램은 OS에게 시스템콜을 요청하여 입출력을 수행한다.
시스템 콜은 일종의 인터럽트로서 CPU 제어권을 OS로 넘기게 된다. 그렇게 되면 OS는 해당 시스템콜을 처리하기 위한 루틴으로 가서 명령을 수행. 입출력 수행을 마치면 디스크 컨트롤러는 CPU에게 인터럽트로 수행이 마쳤음을 알리고 해당 프로그램이 다시 CPU를 할당 받을 수 있도록 한다.
'CS > OS' 카테고리의 다른 글
공부 내용을 기록하려고 하니 배보다 배꼽이 더 커지는것 같다. (0) | 2021.12.18 |
---|