본문 바로가기

카테고리 없음

컴퓨터 시스템의 동작 원리

컴퓨터의 시스템 구조는 내부장치와 외부장치로 나눠진다.

  • 내부장치: CPU, 메모리
  • 외부장치: 디스크, 키보드, 마우스, 모니터, 네트워크 장치

 

입출력 (Input-Output: I/O) 장치: 키보드로 입력 받아 결과를 모니터로 출력

 

 


1. 컴퓨터 시스템의 구조

 

메모리 및 입출력장치 등의 하드웨어 장치에는 컨트롤러라는 것이 붙어있다.

일종의 작은 CPU라고 보면 된다.

 

컴퓨터 내부장치와 외부장치 구조

 

 

 


2. CPU 연산과 I/O 연산

 

I/O 연산은 입출력 컨트롤러가 담당

컴퓨터 내에서 수행되는 연산은 메인 CPU가 담당

로컬버퍼: 각 장치마다 데이터를 임시로 저장하기 위한 작은 메모리

 

디스크나 키보드 등에서 데이터를 읽어오는 경우, 우선 로컬버퍼에 데이터가 임시로 저장된 후 메모리에 전달된다.

로컬버퍼로 읽어오는 일은 컨트롤러가 담당

 

 

 

 


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

인터럽트의 종류

  • 하드웨어 인터럽트
  • 소프트웨어 인터럽트

 

인터럽트 라인에 신호를 보내서 인터럽트가 발생했음을 알려주는 방식이 동일

 

하드웨어 인터럽트

일반적으로 인터럽트라고 하면 하드웨어 인터럽트를 의미한다.

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

 

소프트웨어 인터럽트

소프트웨어가 CPU 인터럽트 라인을 세팅

스프트웨어 인터럽트에는 예외상황(exception)시스템 콜(system call)이 존재한다.

 

예외상황 (exception)

비정상적인 작업을 시도하거나, 권한이 없는 작업을 시도할 떄 이에 대한 처리를 위해 발생시키는 인터럽트

 

시스템 콜 (system call)

사용자 프로그램이 운영체제 내부에 정의된 코드를 실행하고 싶을 때 운영체제에 서비스를 요청하는 방법

 

 

 

 

 


4. 인터럽트 핸들링

 

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

 

ex) 데이터를 읽어오는 과정

  1. 프로그램이 디스크에서 데이터를 읽어오라는 명령을 내림
  2. 디스크 컨트롤러가 데이터를 읽어와 로컬 버퍼에 저장
  3. 디스크 컨트롤러가 인터럽트를 발생시킴
  4. CPU는 명령 하나를 수행하고 난 뒤 인터럽트 라인을 확인
  5. 인터럽트가 존재하면 프로세스의 현재 상태를 PCB에 저장
    • 현재 상태란 CPU에서 실행 중인 명령의 메모리 주소 및 부가적인 정보
    • 예를 들어 CPU에서 명령이 실행될 때에는 CPU 내부에 있는 임시 기억장치인 레지스터(register)에 데이터를 읽거나 쓰면서 작업을 하는데, 새로운 명령을 실행하면 레지스터 값이 지워지기 때문에 저장하는 것
    • 프로세스 제어블록 (Process Control Block) : 현재 시스템 내에서 실행되는 프로그램을 관리하기 위한 자료구조, 프로그램마다 하나씩 존재, 프로그램의 어느 부분이 실행 중이었는지 저장 (메모리 주소, 레지스터 값, 하드웨어 상태)
    • 프로세스를 봉쇄상태로 변경
  6. 운영체제의 인터럽트 벡터를 통해 인터럽트의 처리를 위해 정의된 코드를 찾음
  7. 인터럽트 처리루틴또는 인터럽트 핸들러를 통해 업무를 처리하는 방법을 확인
  8. CPU제어권이 인터럽트 처리루틴으로 넘어감
  9. CPU는 디스크 로컬버퍼에 있는 내용을 메모리에 전달
    • 데이터를 읽어오라고 했던 프로세스의 봉쇄상태를 준비상태로 변경시킨다.
  10. 원래 수행하던 작업으로 돌아가 업무 진행
    • 인터럽트 처리가 끝나면 저장된 상태를 PCB로부터 CPU상에 복원해 인터럽트 당하기 기전의 위치부터 실행이 이어짐

 

인터럽트 벡터: 인터럽트 종류마다 번호를 정해서, 번호에 따라 처리해야 할 코드가 위치한 부분을 가리키고 있는 자료구조

인터럽트 처리루틴, 인터럽트 핸들러 : 실제 처리하는 방법을 적어 놓은 코드

 

운영체제는 인터럽트가 발생할 때에만 실행

부팅 후 정상 상태에 머무르게 되면 CPU가 항상 사용자 프로그램에 의해 사용됨

 

 

 

 

 


5. 입출력 구조

 

입출력(I/O)이란 컴퓨터 시스템이 컴퓨터 외부의 입출력 장치들과 데이터를 주고 받는 것을 말한다.

CPU의 명령 수행 속도는 빠르지만 입출력 장치에서 데이터를 읽어오는 등의 입출력 연산은 상대적으로 느리다.

 

입출력은 입출력을 요청한 프로세스 처리방법에 따라 두가지로 나눌 수 있다.

  • 동기시 입출력
  • 비동기식 입출력

 

동기식 입출력 (synchronous I/O)

입출력 요청의 동기화를 위해 장치별로 큐(queue)를 두어 요청한 순서대로 처리

 

입출력이 진행되는 동안 그 프로그램의 다음 명령을 수행하지 않고 기다린다.

입출력 연산이 끝날 때까지 인터럽트를 기다리며 자원을 낭비 -> CPU 낭비가 심하다

운영체제가 입출력 중인 프로그램은 "봉쇄 상태"로 전환시켜 CPU를 빼앗아 와 명령을 수행할 수 있는 CPU에게 할당

 

장치마다 큐헤더가 존재하고 장치별로 입출력 수행 순서를 지키기 위한 큐를 관리

 

디바이스 큐와 각 큐에 대기 중인 프로세스의 모습

 

비동기식 입출력

CPU의 제어권이 입출력을 요청한 프로세스에게 곧바로 다시 주어지며, 입출력 연산이 완료되는 것과 무관하게 처리 가능한 작업부터 처리한다.

 

 

 

동기식 입출력과 비동기식 입출력

 

 

 

 

 


6. DMA

인터럽트의 빈도를 줄여 CPU를 좀 더 효율적으로 관리하고 입출력 연산을 빠르게 수행할 수 있게함.

 

원칙적으로 메모리는 CPU에 의해서만 접근할 수 있다.

CPU외의 장치가 메모리의 데이터에 접근하려면 인터럽트를 발생시켜 CPU가 접근하게 해야한다.

그러나 CPU 사용의 효율성을 위해 CPU 이외에 메모리 접근이 가능한 장치를 하나 더 두는 경우가 많은데 이를 DMA 라고 부른다. CPU가 입출력 장치들의 메모리 접근 요청에 의해 자주 인터럽트 당하는 것을 막아주는 역할. DMA를 사용하게 되면 로컬버퍼에서 메모리로 읽어오는 작업을 대행함. 바이트(byte)가 아닌 블록(block)이라는 큰 단위로 정보를 메모리로 읽어온 후에 CPU에게 인터럽트 발생시켜 해당 작업의 완료를 알려줌

 

 

 

 

 

 


7. 저장장치의 구조

 

보조기억장치의 용도

  • 파일 시스템 용도
  • 스왑 영역

 

파일 시스템(file system) 용도

전원이 나가도 유지해야 할 정보를 저장하기 위함

 

스왑 영역(swap area)

메모리의 연장 공간으로 사용

프로그램 수행에 당장 필요한 부분만 메모리에 올려놓고 그렇지 않은 부분은 디스크의 스왑 영역에 내려 놓기 위함

 

스왑 아웃 : 디스크에 내려 놓는 일을 말함

 

 

 

 

 

 


8. 저장장치의 계층 구조

 

위로 갈수록 속도는 빠르나, 비싸다.

아래로 갈수록 속도는 느리나, 상대적으로 싸다.

Primary에 존재하는 메모리는 휘발성이며, Secondary에 존재하는 디스크 및 테이프는 비 휘발성이다.

 

 

컴퓨터 시스템의 저장장치 계층 구조

 

캐싱기법: 상대적으로 느린 저장장치의 성능을 향상시키는 총체적 기법

프로그램은 일부분만 집중적으로 사용되고 특정 부분은 거의 사용되지 않기 때문에 당장 사용되거나 빈번히 사용될 정보를 빠른 저장장치에 선별적으로 저장하여 성능을 향상시키는 방법이다.

 

 

 

 

 

 


9. 하드웨어 보안

 

하드웨어적인 보안을 유지하기 위해 운영체제는 두가지 모드를 지원한다.

  • 커널모드 (kernel mode, system mode)
  • 사용자모드 (user mode)

 

 

커널모드

중요한 정보에 접근해 위험한 상황은 커널모드에서만 실행할 수 있도록 함

운영체제가 CPU의 제어권을 가지고 운영체제 코드를 실행하는 모드

모든 명령을 다 실행할 수 있다.

 

사용자 모드

일반적인 연산만 실행 가능

제한적인 명령만 실행가능

 

모드비트 (mode bit)

모드비트가 1로 세팅되어 있으면 사용자모드로서 제한된 명령만을 수행

모드비트가 0으로 세티오디어 있으면 커널모드로서 모든 명령을 수행 가능

 

사용자 모드에서 커널 모드로 갈 때는 모드 비트를 0으로 변경

커널 모드에서 사용자 모드로 갈 때는 모드 비트를 1로 변경

 

입출력은 특권명령이기 때문에 모드비트가 0일때만 수행가능

 

 

 

 

 

 


10. 메모리 보안

 

여기서는 하나의 프로그램이 메모리의 한 영역에 연속적으로 위치하는 단순화된 메모리 관리 기법을 사용하는 경우에 대한 케이스만 살펴볼 예정이다.

하나의 사용자 프로그램이 다른 사용자의 프로그램이나 운영체제가 위치한 메모리 영역을 침범할 수 있기 때문에 메모리도 보안이 필요하다.

인터럽트 벡터와 인터럽트 처리루틴이 있는 곳은 각별한 보안이 필요

 

2개의 레지스터를 사용해서 접근하려는 메모리 부분을 확인함으로서 메모리를 보호

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

 

기준 레지스터

프로그램이 합법적으로 접근할 수 있는 메모리상의 가장 작은 주소를 보관

 

한계 레지스터

기준 레지스터값부터 접근할 수 있는 메모리의 범위를 보관

 

사용자 프로그램은 기준 레지스터 + 한계 레지스터값 사이의 주소 영역에만 접근할 수 있음

 

 

 

메모리 접근 연산은 특권 명령은 아니다.

사용자 모드인 경우에는 기준 레지스터와 한계 레지스터를 사용하여 보호

커널모드에서는 메모리에 모제한으로 접근하는 것이 가능

 

기준 레지스터와 한계 레지스터의 값을 세팅하는 연산은 특권명령

 

 

 

 


11. CPU 보호

 

CPU가 하나의 프로그램에 의해 독점되는 것을 막기 위해 운영체제는 타이머(timer)라는 하드웨어를 사용한다.

정해진 시간이 지나면 인터럽트를 발생시켜 운영체제가 CPU의 제어권을 획득할 수 있도록 함

로드 타이머: 타이머의 값을 세팅하는 명령, 특권 명령에 속한다.

타이머는 시분할 시스템에서도 사용된다. 우리가 사용하는 대부분의 컴퓨터가 바로 시분할 시스템에 해당한다.

 

 

 

 

 

 


12. 시스템 콜을 이용한 입출력 수행

 

입출력 명령은 운영체제 코드에 구현되어 있으며, 사용자 프로그램은 직접 입출력을 수행하는 대신 시스템 콜이라는 서비스 대행 요청을 하여 입출력을 수행한다. 시스템 콜은 일종의 소프트웨어적인 인터럽트로서 사용자 프로그램이 시스템 콜을 할 경우 트랩이 발생해 CPU의 제어권이 운영체제로 넘어가게 된다. 그러면 운영체제는 해당 시스템 콜을 처리하기 위한 루틴으로 가서 정의된 명령을 수행한다.