Frinee의 코드저장소

컴퓨터 시스템의 동작 원리

by Frinee
이 글은 반효경 저 - "운영체제와 정보기술의 원리"를 공부하고 정리하여 작성하였습니다.

 

1. 컴퓨터 시스템의 구조

컴퓨터 구조
컴퓨터의 업무처리

  • 내부장치: CPU, 메모리
  • 외부장치: 디스크, 키보드, 마우스, 모니터, 네트워크 장치 등
  • 각 하드웨어 장치에는 컨트롤러가 붙어 있다.
  • 컨트롤러(Controller): 일종의 작은 CPU, 각 하드웨어 장치마다 존재하면서 이들을 제어함.
  • 커널(kernel): 운영체제 중 항상 메모리에 올라가 있는 부분을 말함.

 

2. CPU 연산과 I/O 연산

  • I/O 연산: 입출력 컨트롤러 담당
  • 주요 연산: 메인 CPU가 담당
  • 로컬버퍼(Local buffer): 장치 컨트롤러가 데이터를 임시로 저장하기 위한 작은 메모리
  • 디스크나 키보드에서 데이터를 읽어오는 경우
    1. 컨트롤러가 장치에서 로컬버퍼로 읽어온다.
    2. 로컬버퍼에 데이터가 임시로 저장된 후 메모리에 전달한다.
    3. 컨트롤러가 작업을 마치면 인터럽트를 발생시켜 CPU 옆 인터럽트 라인에 보고
    4. CPU가 인터럽트 라인에 신호가 들어온 것을 확인
    5. 하던 작업을 중단하고 인터럽트 작업을 먼저 처리
    6. 이후 CPU는 다음 명령 수행

 

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

  • 운영체제 커널에는 인터럽트 처리루틴이 미리 프로그래밍되어 있음.
  • 운영체제는 사용자 프로그램에 필요한 서비스를 제공함.

3.1. 인터럽트 발생 시 CPU가 하는 일

  • CPU가 인터럽트 발생 시 수행하는 작업
    • 디스크의 로컬버퍼에 있는 내용을 사용자 프로그램 메모리로 전달
    • 해당 프로그램이 CPU를 할당받을 경우 다음 명령을 수행할 수 있음을 표시
  • 하드웨어 인터럽트: 컨트롤러 등의 하드웨어 장치가 CPU의 인터럽트 라인을 세팅함
  • 소프트웨어 인터럽트: 소프트웨어가 CPU의 인터럽트 라인을 세팅함.
  • 인터럽트 벡터(Interrupt vector)
    • 인터럽트 종류마다 번호를 정하여 번호에 따라 처리해야 할 코드 위치를 가리키고 있는 자료구조
    • 운영체제가 갖고 있고 실제 처리코드는 인터럽트 처리루틴에서 정의됨.

3.2. 소프트웨어 인터럽트

  • 트랩(trap)이라 불리고 대표적으로 예외상황(Exception)과 시스템 콜(System call)이 있다.
  • 사용자 프로세스로부터 CPU 제어권이 운영체제에 이양되어 처리됨.
  • 예외상황(Exception): 사용자 프로그램이 비정상적인 작업을 시도하거나 권한이 없는 작업을 시도한 경우 처리하기 위해 발생시키는 인터럽트
  • 시스템 콜(System call): 사용자 프로그램이 운영체제 내부에 정의된 코드를 실행하려 할 때 운영체제에 요청하는 방법

 

4. 인터럽트 핸들링

  • 인터럽트가 발생한 경우 처리해야 할 일의 절차를 말함.
  • CPU 명령 실행 중에는 임시 기억장치인 레지스터를 활용함.
  • 인터럽트 발생 시 레지스터값들이 지워져 CPU 내의 상태를 저장해야 함.
  • 실행 중인 프로그램의 현재 상태(실행 중인 명령의 메모리 주소를 포함한 부가적인 정보) 저장함.

4.1. 프로세스 제어블록 (Process Conrtol Block: PCB)

  • 운영체제는 현재 시스템 내에서 실행되는 프로그램을 관리하기 위해 두는 자료구조
  • 프로그램마다 하나씩 존재하고 실행 중인 프로그램의 부분 정보를 저장
    • 실행 중인 코드의 메모리 주소
    • 레지스터값
    • 하드웨어 상태 등
❗놀랍게도 오늘날의 운영체제는 인터럽트 발생 시에만 실행된다는 것이다.
정상 상태일때는 CPU가 일을 하고 있고 인터럽트 시에만 잠깐 제어권을 획득하는 것 뿐이다.

 

5. 입출력 구조

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

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

  • 한 프로그램이 입출력 요청을 했을 때 입출력 작업을 완료한 후에 후속 작업에 들어서는 방식
  • CPU의 느린 입출력 연산이 끝날 때까지 인터럽트를 기다리며 자원을 낭비하게 됨
  • 그래서 입출력 수행을 하는 경우, CPU를 다른 프로그램에 이양하여 쉬지 않도록 해줌.
  • 그리고 입출력 프로그램을 봉쇄 상태(blocked state)로 전환
  • 입출력이 끝난 후, 운영체제 커널이 프로그램에 다시 CPU를 할당할 수 있도록 봉쇄 상태를 해제
  • 다수의 입출력 요청이 올 경우
    • 입출력의 동기화를 위해 큐(queue)를 두어 요청한 순서대로 처리할 수 있도록 함

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

5.2. 비동기식 입출력(Asynchronous I/O)

  • 연산을 요청한 후에 CPU의 제어권을 입출력 연산을 호출한 그 프로그램에게 곧바로 부여하는 방식
  • 읽어온 결과를 이용해서 다음 연산을 수행하는 경우, 입출력 완료 후 수행
  • 입출력 연산과 무관한 작업이 있는 경우, 해당 작업을 먼저 수행

 

6. DMA

  • CPU 외의 메모리 접근이 가능한 장치
  • CPU가 입출력 장치들의 메모리 접근 요청으로 인해 인터럽트 빈도를 줄이는 역할
  • 로컬버퍼에서 메모리로 읽어오는 작업을 대행함.
  • 블록(block)이라는 큰 단위로 정보를 메모리로 읽은 후에 CPU에 인터럽트를 발생시켜 해당 작업의 완료를 알려 줌

 

7. 저장장치의 구조

  • 주기억장치: 메모리, 보통 휘발성의 RAM을 사용
  • 보조기억장치: 플래시 메모리, CD, 마그네틱 테이프 등, 비휘발성의 마그네틱 디스크 사용

7.1. 보조기억장치

  • 용도
    1. 파일 시스템용: 전원이 없는 상태에서 유지해야 하는 정보를 파일 형태로 저장
    2. 스왑 영역(Swap area): 메모리의 크기가 한정되어 공간이 부족한 경우 디스크 스왑 영역에 저장, 하드디스크가 가장 널리 사용
  • 하드디스크
    • 보조기억장치 중 가장 대표적인 저장매체
    • 여러 개의 마그네틱 원판이 있고 암(arm)이 이동하며 원판에 저장된 데이터를 읽고 씀
    • 디스크 원판의 표면은 트랙(track)으로 나뉘고, 각 트랙은 섹터(sector)로 나뉨

 

 

8. 저장장치의 계층 구조

  • 빠른 저장장치부터 느린 저장장치까지 단계적인 계층 구조를 이룸
    • 빠른 저장장치: 단위 공간당 가격이 높아 저용량을 사용
    • 느린 저장장치: 가격이 저렴하여 대용량을 사용, 접근속도가 느림
  • 상위 저장장치 계층으로 갈수록 접근 속도는 빠르고 용량은 상대적으로 적음
  • 캐싱 기법을 사용하면 적은 용량을 사용해도 대용량 만큼의 성능을 낼 수 있음

8.1. 캐싱 기법

  • 상대적으로 용량이 적은 빠른 저장장치를 이용해 느린 저장장치의 성능을 향상시키는 총체적 기법
  • 상대적으로 느린 저장자치 내용 중 당장 사용되거나 자주 사용되는 정보를 빠른 저장장치에 선별적으로 저장하여 속도 차이를 완충시킴

 

9. 하드웨어의 보안

  • 어떤 프로그램이 다른 프로그램의 실행을 방해하거나 충돌을 일으킬 수 있기 때문에 보안 기법이 필요함
  • 운영체제는 커널모드(kernel mode)와 사용자 모드(user mode)를 지원하여 보안성을 확보
  • 커널모드
    • 운영체제가 CPU의 제어권을 가지고 운영체제 코드를 실행하는 모드
    • 모든 종류의 명령을 다 실행할 수 있음.
  • 사용자모드
    • 일반 사용자 프로그램이 실행되며 제한적인 명령만 수행
  • 모드비트(mode bit): 사용자 프로그램을 감시하기 위해 설정한 비트(0: 커널모드, 1: 사용자 모드)
  • 사용자 프로그램이 보안적으로 중요한 명령을 수행할 때 시스템 콜을 통해 운영체제에 해줄 것을 요청함
  • 운영체제가 요청된 작업을 마친 후 모드비트를 1로 만들어 사용자 프로그램에게 넘겨줌

※ 입출력 명령은 특권 명령이기 때문에 운영체제가 항상 담당함.

 

10. 메모리 보안

  • 여러 프로그램이 메모리에 동시에 올라와서 다른 프로그램 영역을 침범하는 경우가 있어 보안이 필요함.
  • 2개의 레지스터를 사용하여 프로그램이 접근하려는 메모리 부분이 합법적인지를 확인함
  • 기준 레지스터: 프로그램이 수행되는 동안 그 프로그램이 합법적으로 접근할 수 있는 메모리상의 주소 최소값을 보관
  • 한계 레지스터: 그 프로그램이 기준 레지스터값부터 접근할 수 있는 메모리의 범위 정보 보관
  • “기준 레지스터 ≤ 논리적 주소 ≤ 기준 레지스터 + 한계 레지스터”의 영역일때만 접근이 가능
  • 벗어날 경우 예외상황 인터럽트를 발생시킴.
  • 다만, 한 프로그램이 메모리 한 영역에 연속적으로 위치하는 단순화된 메모리 관리 기법에서만 가능한 기법
  • 메모리 접근 명령은 특권명령이 아니지만, 2개의 레지스터값을 설정하는 연산은 특권명령으로 규정

 

11. CPU 보호

  • CPU가 하나의 프로그램에 의해 독점되는 것을 막기 위해 타이머(timer) 하드웨어를 사용
  • 타이머는 정해진 시간이 지나면 인터럽트를 발생시켜 운영체제가 CPU의 제어권을 획득하게 함.
  • 로드 타이머(load timer): 타이머 값을 세팅하는 명령, 이것도 특권명령
  • 타이머는 시분할 시스템에서 시간 계산을 위해 사용

 

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

  • 입출력 명령은 운영체제에게 시스템 콜이라는 대행 요청을 통해 수행됨
  • 시스템 콜을 한 경우 트랩이 발생해 CPU 제어권이 운영체제로 넘어가게 됨
  • 이후 운영체제는 시스템 콜을 처리하기 위한 루틴으로 가 명령을 수행
  • 명령을 수행한 후 CPU에 인터럽트를 발생시켜 알리고 해당 프로그램이 CPU를 할당받을 수 있도록 함.

 

 

자료

  • 운영체제와 정보기술의 원리 (반효경 저, 2020.5)

'[컴퓨터 과학자 스터디] > 운영체제' 카테고리의 다른 글

CPU 스케줄링  (0) 2024.10.27
프로세스 관리  (0) 2024.10.22
프로그램의 구조와 실행  (0) 2024.10.21
운영체제 개요  (1) 2024.10.11
컴퓨터 및 정보기술의 역사  (1) 2024.10.11

블로그의 정보

프리니의 코드저장소

Frinee

활동하기