CS/운영체제

컴퓨터 시스템 구조

수수한개발자 2023. 8. 2.
728x90

반효경 교수님의 강의로 운영체제를 공부하고 있습니다.

보통 컴퓨터 시스템 구조라 하면 CPU, Memory를 말합니다. 그리고 I/O 디바이스로 구성되어 있습니다.

 

컴퓨터 시스템의 구조는 컴퓨터 내부 장치인 CPU, 메모리와 컴퓨터 외부 I/O 장치(입출력 장치)인 디스크, 키보드, 마우스 등으로 구분된다. 컴퓨터는 외부의 I/O 장치(키보드 등등)에서 Input을 받아와 데이터를 처리한 뒤, 그 결과를 output 하는 방식으로 일을 처리합니다.

 

인터럽트 - interrupt

인터럽트란 CPU가 일을 하는 도중에 I/O 장치등에 의해서 먼저 처리를 해야 되는 상황을 말합니다.

인터럽트 당한 시점의 레지스터와 프로그램 카운터를 저장한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.

 

interrupt : 하드웨어가 발생시킨 인터럽트 

 

Trap(소프트웨어 인터럽트)

  1. Exception : 프로그램이 오류를 범한 경우
  2. System call : 프로그램이 커널 함수를 호출하는 경우

인터럽트 벡터

  • 해당 인터럽트의 처리 루틴 주소를 가지고 있음

인터럽트 실행 과정

A라는 일을 하던 중 인터럽트가 발생한다고 가정한다.

1. 현재 실행하던 프로그램으로 복귀할 때 필요한 정보를 저장한다.

2. 인터럽트를 요청한 소스를 확인한다.

3. 해당 인터럽트를 서비스 루틴(인터럽트 핸들러)을 실행할 수 있도록 준비한다.

 

Mode bit

  • mode bit이란, 제어권이 운영체제가 가지고 있는지, 사용자 프로그램이 가지고 있는지에 대한 표시.
  • mode bit이 0 경우, 운영체제가 CPU를 들고 있는 것이고 모든 명령을 할 수 있는 상태 (I/O 접근까지도)
  • 운영체제가 사용자프로그램에 넘겨줄 때, mode bit을 1로 변경해 주고 넘겨준다.
  • mode bit이 1 경우, 사용자 프로그램이 제어권을 가지고 있어, 제한된 영역만 접근할 수 있다. 
  • mode bit의 목적 : 사용자 프로그램의 잘못으로 초래할 수 있는 위험을 막기 위함.

Timer

  • 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킴
  • 타이머를 매 클럭 틱 때마다 1씩 감소
  • 타이머 값이 0이 되면 타이머 인터럽트 발생
  • CPU를 특정 프로그램이 독점하는 것으로부터 보호
  • 타이머는 time sharing을 구현하기 위해 널리 이용됨
  • 현재 시간을 계산하기 위해서도 사용

Device Controller

  • I/O 디바이스 컨트롤러
    • 해당 I/O 장치 유형을 관리하는 일종의 작은 CPU
    • 제어 정보를 위해 control register, status register를 가짐
    • local buffer를 가짐( 일종의 data register)
  • I/O는 실제 device와 local buffer 사이에서 일어남
  • 디바이스 컨트롤러는 I/O가 끝났을 경우 인터럽트로 CPU에 그 사실을 알림
  • Device driver(장치 구동기) -> OS 코드 중 각 장치별 처리 루틴 -> software
  • Device controller(장치 제어기) -> 각 장치를 통제하는 일종의 작은 CPU -> hardware

DMA (Direct Memory Access) Controller

말 그대로 직점 메모리에 접근할 수 있는 컨트롤러입니다.

원래는 메모리에 접근할 수 있는 장치는 CPU만 가능합니다.

DMA는 메모리에 접근할 수 있습니다. 이때 DMA와 CPU가 동시에 같은 메모리에 접근하면 문제가 생길 수 있기 때문에 

중간에 memory controller가 조율을 해줍니다.

I/O장치가 인터럽트를 자주 걸게 되면서 CPU가 자신이 하는 일에 너무 방해를 받습니다.

계속 I/O 장치가 인터럽트를 걸어서 CPU가 그걸 처리해 주면 너무 오버헤드가 크게 되므로

CPU는 자기 일을 하고 있고 중간중간에 들어오는 로컬 버퍼에 들어오는 내용이 작업이 끝났으면 DMA 컨트롤러가 

직접 메모리에 복사하는 일을 해줍니다.

 

입출력 I/O의 수행

모든 입출력 명령은 운영체제의 특권 명령이다. 그러면 사용자 프로그램은 어떻게 I/O를 할 수 있을까?

운영체제에게 부탁하는데 그것을 사용자 프로그램이 운영체제의 함수 호출을 하는 시스템 콜(system call)이라고 부릅니다.

  1. trap을 사용하여 인터럽트 벡터의 특정위치로 이동
  2. 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
  3. 올바른 I/O 요청인지 확인 후 I/O tngod
  4. I/O 완료 시 제어권을 시스템콜 다음 명령으로 옮김

 

현대의 운영체제는 인터럽트에 의해 구동됨.

 

 

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

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

  • I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
    • 구현 방법 1
      • I/O가 끝날 때까지 CPU를 낭비 시킴
      • 매시점 하나의 I/O만 일어날 수 있음
    • 구현 방법 2
      • I/O가 완료될 때까지 해당 프로그램에게 CPU를 빼앗음
      • I/O가 처리를 기다리는 줄에 그 프로그램을 줄 세움
      • 다른 프로그램에게 CPU를 줌
  • 비동기식 입출력(asynchronous I/O)
    • I/O가 시작된 후 입출력 작업 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감

두 경우 모두 I/O의 오나료는 인터럽트로 알려줌

 

 

 

저장 장치 계층 구조

Primary Storage vs Secondary Storage

CPU는 바이트 단위로 접근 가능한 매체이어야 접근이 가능하다.

 

[Primary Storage]

CPU에서 직접 접근할 수 있는 매체를 말하며, Executable (실행 가능하다)라고 부른다. 즉, 해당 저장소는 바이트 단위로 CPU 접근이 가능하므로 Primary라고 부르며 전원이 꺼지면 데이터가 사라지는 휘발성 특징을 갖는다.

 

[Secondary Storage]

CPU가 직접 접근하지 못하는 매체를 말한다. 하드 디스크의 단위는 섹터 단위이므로 CPU가 접근하지 못해서 Secondary라고 부른다. 해당 저장소는 전원이 꺼져도 데이터가 보존되는 비휘발성 특징을 갖는다.

 

캐시 메모리

캐시 메모리는 CPU와 메인 메모리의 속도 차이를 완충하기 위해 존재한다. 용량이 적기 때문에 모든 것을 담아 둘 수는 없으나, 빈번히 사용되는 필요한 정보를 선별적으로 저장하여 재사용하는 캐싱 기법을 통해 시스템의 성능을 높일 수 있다.

 

 

프로그램의 실행(메모리 load)

 

프로그램은 File System에 실행 파일 형태로 저장되어 있고, 이를 실행하면 메모리에 올라가 프로세스가 된다. 정확히 말하면, 물리적인 메모리에 프로그램이 바로 올라가는 것이 아니라 가상 메모리 단계를 추가로 거친다. 이때 독자적인 메모리 주소 공간이 형성되는데, 이 공간에는 Code, Data, Stack 영역이 있다.

 

Code

CPU에서 실행할 기계어 코드를 저장한다.

 

Data

전역 변수 등 프로그램이 사용하는 데이터를 저장한다.

 

Stack

함수가 호출될 때 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장한다.

그다음 가상 메모리에서 물리적인 메모리로 프로그램이 올라가는데, 메모리 낭비를 방지하기 위해 프로그램 중 당장 실행에 필요한 부분만 올라가고, 그렇지 않은 부분은 디스크 중 메모리의 연장 공간으로 사용되는 스왑 영역에 내려놓는다. 즉, 주소 공간을 쪼개서 어떤 부분은 메모리에 있고, 어떤 부분은 스왑 영역에 있게 된다.

 

 

커널 주소 공간의 내용

 

code : 시스템콜, 인터럽트 처리코드, 자원 관리를 위한 코드, 편리한 서비스 제공을 위한 코드 

 

data : 운영체제가 이용하는 자료구조들이 저장되어 있다. 운영체제는 CPU, Memory, disk를 관리하고 통제한다.

하드웨어를 관리하기 위해 자료구조를 만들어 관리하고 있다.

운영체제는 프로세스를 관리하기 위한 자료구조도 가지고 있다. 이것을 PCB(Process Control Block)라고 한다.

 

stack : 운영체제도 함수 구조로 되어 있어서 함수를 콜 할 때 등 스택에 저장한다. 사용자마다 별도로 사용한다.

 

사용자 프로그램이 사용하는 함수

함수(function)

프로세스 A의 Address space

  • 사용자 정의 함수
    • 자신의 프로그램에서 정의한 함수
  • 라이브러리 함수
    • 자신의 프로그램에서 정의하지 않고 가져다 쓴 함수
    • 자신의 프로그램의 실행 파일에 포함되어 있다.

Kenel Address space

  • 커널 함수
    • 운영체제 프로그램의 함수
    • 커널 함수의 호출 = 시스템 콜

 

출처

http://www.kocw.net/home/search/kemView.do?kemId=1046323

728x90

'CS > 운영체제' 카테고리의 다른 글

CPU Scheduling  (1) 2023.10.20
프로세스 관리  (0) 2023.08.27
프로세스  (0) 2023.08.08
운영체제란 무엇인가?  (0) 2023.08.02

댓글