버퍼링은 프로세서(전자적 속도)와 입출력장치(기계적 속도)의 속도 차이로 생긴 유휴 시간이 없도록 입출력장치별로 입출력 버퍼를 두어, 프로세서에서 연산을 할 때 동시에 다른 작업을 입출력 하는 방법이다.

스풀링(*spool = simulatneous peripheral operation on-line)은 디스크를 버퍼처럼 사용하여 입출력장치(라인프린터나 카드판독기 등)에서 미리 읽는 것이다

둘 모두 프로세서와 입출력장치간의 속도차이를 보완하기 위한 개념이지만, 버퍼링은 하드웨어의 일부인 버퍼를 사용하고, 스풀링은 별개의 오프라인 장치를 사용한다는 점에서 차이가 있다.

따라서 버퍼링이 하나의 입출력 작업과 그 작업의 계산만 함께 할 수 있는 반면에, 스풀링은 여러 작업의 입출력과 계산을 동시에 할 수 있다. 

운영체제는 사용자가 하드웨어를 효율적으로, 그리고 편리하게 사용할 수 있도록 돕는 소프트웨어이다.

운영체제의 의의는 다양한 프로그램이 컴퓨터 자원을 효율적으로 사용할 수 있도록 관리 하는데에 있다.

운영체제의 역할은 다른 응용프로그램이 제 역할을 수행하도록 환경을 조성(조정자)하고, 효율적으로 자원을 관리(자원 관리자)하며, 오류발생과 입출력장치를 제어(응용프로그램/입출력장치 제어자)하는것이다.

 

운영체제에서 제공하는 기능은 크게 두가지로, 자원 관리와 시스템 관리로 나눌 수 있다.

자원 관리 기능은 다음으로 나눌 수 있다.

1) 메모리 관리

2) 프로세스 관리

3) 주변장치(입출력 장치)관리

4) 데이터 관리

시스템 관리 기능은 다음과 같다.

1) 시스템 보호(사용자 권한 부여)

2) 네트워킹, 통신

3) 명령 해석기

 

초기 운영체제는 컴퓨터 시스템의 성능을 향상시키려고 발전해왔다. 

하드웨어가 발전함에 따라, 시스템 성능과 더불어 사용자의 편의성에도 무게가 실리기 시작했다..

 

 

명령어는 연산부호, 피연산자로 이루어져있다.

연산부호(Operation Code)는 산술연산, 시프트, 논리연산, 보수 등의 연산을 정의한다.

ex) +, -, *, /, AND, OR, NOT 등...

피연산자(Operand)는 연산할 데이터를 저장한다. 보통 데이터보다는 데이터 주소를 저장한다.

 

A = B + C 

A는 목적지 피연산자이며 연산 결과를 저장할 목적지 주소를 가지고있다.

B와 C는 소스 피연산자로, 연산에 필요한 데이터 주소를 가지고 있다.

 

피연산자의 주소를 나타내는 방식에는 직접 주소(direct address), 간접 주소(indirect address) 등이 있다.

직접 주소는 피연산자에 데이터가 있는 메모리 주소를 지정한다.

R1 자체가 주소이기 때문에 한번에 데이터에 접근한다.

간접 주소는 피연산자에 데이터가 있는 메모리주소 정보를 지정한다.

R0가 데이터 주소 정보이고, 30H가 데이터 주소이다. 그림과 같이 두 번 메모리를 참조하게 된다.

이 둘의 차이점은 간접주소는 데이터 주소 정보를 통해 데이터 주소를 한번 읽고, 읽어낸 주소를 바탕으로 데이터를 읽어내 총 두 번 메모리를 참조하지만, 직접주소는 한번에 데이터를 읽을 수 있다는 점에 있다.

 

 

 

메모리의 종류에는 레지스터, 캐시, 메인 메모리, 보조기억장치 등이 있다.

메모리는 속도가 빠를 수록 비싸고 용량이 작기 때문에, 메모리간 계층구조를 구성하여 성능을 상호보완한다.

레지스터는 프로세서 내부에 존재한다. 프로세서가 사용할 데이터를 보관하는 가장 빠른 메모리이다.

캐시는 프로세서와 메인 메모리 간의 속도 차이를 보완하기 위한 고속 버퍼이다.

메인 메모리는 프로세서 외부에 존재하며, 프로세서에서 즉각적으로 수행할 프로그램과 데이터를 저장하거나, 프로세서에서 처리한 결과를 저장한다.

보조기억장치는 하드디스크(HDD)같이 접근시간은 느리지만 기억용량이 큰 기억장치를 말한다.

이러한 성능(속도, 용량, 비용)이 다른 기억장치를 효과적으로 사용해 시스템의 성능을 향상시키는것이 메모리 계층 구조의 목적이다

.

캐시(Cache)는 프로세서와 메인 메모리간의 처리 속도 차이를 보완하기 위한 고속 *버퍼이다.

(*버퍼 : 데이터를 한곳에서 다른 한곳으로 전송하는 동안, 일시적으로 그 데이터를 보관하는 메모리 영역)

캐시는 메인 메모리에서 데이터를 블록 단위(저속/낮은 대역폭)로 가져와 프로세서에 워드 단위(고속/높은 대역폭)로 전달한다.

프로세서에서 읽어들인 워드에 참조하려는 정보가 있는 경우를 캐시 적중(cache hit), 없는 경우는 캐시 실패(cache miss)라 한다.

 

Principle of locality

캐시에는 지역성이란것이 존재한다.

지역성이란 기억장치에 대해 특정 영역에만 참조가 집중적으로 이루어지는것으로, 공간적 지역성시간적 지역성 등이 존재한다. 

 

공간적 지역성이 발생하는 이유는 다음과 같다.

1)프로그램이 명령어를 순차적으로 실행하는 경향때문에 발생

2)대부분의 컴파일러를 메모리에 인접한 블록에 배열로 저장. 따라서 프로그램이 배열 원소에 순차적 접글을 시도하므로, 지역적 접근 경향 발생

 

시간적 지역성이 발생하는 이유는 다음과 같다.

1) 같은 주소를 반복해서 참조한 경우

ex) for문, while문...

 

CPU칩에는 여러개의 cache가 들어간다.

그리고 그 성능과 역할에 따라 L1, L2, L3 캐시 등으로 나눌 수 있다.

1) L1 cache : 프로세서와 가장 가까운 캐시이며, 속도를 위해 *Instruction cache와 *Data cache로 나눈다.

(Instruction cache : 메모리의 TEXT영역 데이터를다루는 캐시 / Data cache : TEXT영역을 제외한 모든 영역을 다루는 캐시)

2) L2 cache : L1 캐시보다 용량이 큰 캐시

3) L3 cache : 멀티코어 시스템에서 여러 코어가 공유하는 캐시

캐시의 용량은 L1 < L2 < L3 순이다.

뒤에 붙은 숫자가 늘어날 수록 비교적 코어에서 멀고, 속도가 느리다.

CPU (Central Processing Unit)는 컴퓨터 하드웨어에 부착된 모든 장치의 동작을 제어하고 명령을 실행한다. (프로세서라고도 한다)

프로세서는 연산장치, 제어장치, 레지스터 세 부분으로 구성되며, 각 장치는 내부 버스로 연결되어있다.

연산장치는 산술/논리 연산 등의 기능을 수행한다.

제어장치는 입출력장치간 통신 및 조율을 제어한다.

레지스터는 프로세서 내에 자료를 저장하는 가장 빠른 기억장치이다.

위 사진이 CPU이다.

CPU마다 구성에 있어 차이는 있을 수 있다.

(*I/O - Input Output Processer / QPI - Quick Path Interconnect) 

캐시(Cache)는 속도가 빠른 프로세서와 프로세서에 비해 비교적 느린 메인 메모리간의 처리 속도 격차를 보완하기 위한 고속 버퍼이다.

캐시에 대해서는 다른 글에서 자세히 다룰 예정이다.

+ Recent posts