포시코딩

[운영체제] 2. 컴퓨터 시스템의 구조 (2) 본문

CS (Computer Science)

[운영체제] 2. 컴퓨터 시스템의 구조 (2)

포시 2023. 4. 20. 18:17
728x90

키워드

I/O, DMA, 저장장치, primary, secondary, caching, 프로그램, virtual memory, 커널, code, data, stack, 함수, function

 

I/O

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

I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감

구현 방법 1

  • I/O가 끝날 때까지 CPU를 낭비시킴
  • 매시점 하나의 I/O만 일어날 수 있음

구현 방법 2

  • I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음
  • I/O 처리를 기다리는 줄에 그 프로그램을 줄 세움
  • 다른 프로그램에게 CPU를 줌

* 위의 방법대로 진행할 경우 CPU가 놀지않고 일을 할 수 있게 된다.

 

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

I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감

 

공통

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

 

DMA

(=Direct Memory Access)

  • 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
  • CPU의 중재 없이 device controller가 device의 buffer storage의 내용을
    메모리에 block 단위로 직접 전송
  • 바이트 단위가 아니라 block 단위로 인터럽트를 발생시킨다.

예를들어 키보드에 뭔가를 입력할 때 입력 한글자 한글자 마다 interrupt를 걸게 되면

CPU 입장에서 너무 비효율적인 일을 하게 될 것이다. 

 

DMA Controller에서는 buffer storage에 특정 크기만큼 데이터가 쌓일 때까지 기다린다음

쌓이면 그때서야 interrupt를 걸어 CPU가 interrupt 걸리는 빈도를 줄임으로서 더 효율적으로 일할 수 있게 한다.

 

서로 다른 입출력 명령어

일반적인 I/O 방식(좌), Memory Mapped I/O(우)

  • CPU에서 실행하는 인스트럭션에는 메모리에서만 실행할 수 있는 인스트럭션이 있고
    각 I/O 장치를 접근해야 하는 메모리 인스트럭션과 별개의 인스트럭션이 있다. (일반적)
  • I/O device들에 메모리 주소르 매겨서 메모리 접근 인스트럭션을 통해 I/O를 할 수도 있다. (Memory Mapped I/O)

 

저장장치 계층 구조

올라갈수록

  • 속도 증가
  • 비용 증가(용량이 적어짐)
  • 휘발성 증가(위 연두색 배경이 휘발성 매체, 아래 분홍색 배경이 비휘발성 매체)
    -> 최근 Main Memory도 비휘발성 매체로 나오고 있기도 하지만 해당 포스팅에선 고려 x

Primary

  • CPU에서 직접 접근 가능
    • CPU가 직접 접근하려면 바이트 단위로 접근이 가능해야함
    • DRAM 메모리 같은 경우는 바이트 단위로 주소를 매겨서 바이트 단위로 접근이 가능
  • Executable: 실행 가능하다.

 

Secondary

  • CPU가 직접 접근해서 처리할 수 없음
  • 섹터 단위로 접근하기 때문에(바이트 단위로 접근 x) CPU 접근 불가
  • 때문에 Executable 하지 않은 매체라고 부름

 

Caching

  • 그림에서 Register는 속도가 빠르고 밑으로 갈수록 속도가 Register에 비해 느리기 때문에 캐싱을 사용한다.
  • 재사용이 목적
  • 처음 요청 후 두 번째 요청부턴 요청했던 매체까지 가지 않고 읽어놓은 데이터를 재활용함
  • 용량에 제한이 있기 때문에 전부 캐싱하지 못하고 어떤걸 유지하고 어떤걸 제외할지에 대한 관리가 필요
    (메모리 관리에서 자세히)

 

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

  • 프로그램은 실행 파일의 형태로 파일 시스템에 저장되어 있다.
  • 실행 파일을 실행시키면 메모리에 올라가 프로세스가 됨
  • 메모리에 바로 올라가진 않고 중간 단계를 거침
    -> 가상 메모리(Virtual Memory) 단계

Virtual Memory

  • 어떤 프로그램을 시키면 해당 프로그램의 메모리 Address space(주소 공간)이 형성된다.
  • 0 번째부터 시작하는 그 프로그램만의 독자적인 주소 공간
  • code, data, stack으로 구성됨
    • code: CPU에서 실행할 기계어 코드를 담고 있음
    • data: 프로그램이 사용할 변수, 전역변수 등의 자료구조
    • stack: 코드가 함수 구조로 되어있기 때문에 함수를 호출하거나 리턴할 때 사용(call stack 생각)

  • 물리적인 메모리에 당장 필요한 부분만 올리는 방식으로 사용(메모리 낭비 방지)
  • 당장 필요하지 않은 부분은 Swap Area라는 디스크 공간에 내려놓음
    메모리 공간의 한계로 메모리의 연장 공간으로써 사용
  • 이렇듯 각각 쪼개져서 메모리, Swap Area에 있기 때문에 Virtual Memory라 부른다.

  • Virtual Memory는 각 프로그램마다 독자적으로 가지고 있는 메모리 공간을 의미
  • 전원이 나가면 메모리, Swap Area에 있는 정보는 사라짐
  • Virtual Memory는 전원이 나가도 사라지지 않음. 비휘발성
  • 용도가 다르기 때문에 관리하는 방법도 다르다. (디스크, 스토리지 관리에서 자세히)

Address translation

  • 물리적인 메모리에서도 주소가 0 번부터 시작하기 때문에 
    Virtual Memory의 0 번부터 시작하는 주소를 메모리에 올릴 때 변환해줘야 한다.(주소변환)
  • 하드웨어 장치의 지원을 받아 주소 변환 계층에서 메모리 주소 변환이 이루어짐
    logical(논리적) 메모리 주소가 -> physical(물리적) 메모리 주소로 바뀌는 과정 (메모리 관리에서 자세히)

 

커널 주소 공간의 내용

위 사진의 virtual memory(code, data, stack)을 눕힌 모습

code

운영체제의 커널에는

  • 자원을 효율적으로 관리하기 위한 코드
  • 사용자에게 편리함을 제공하기 위해 그와 관련된 코드
  • 운영체제는 인터럽트마다 CPU를 얻기 때문에 각각의 인터럽트 처리에 대한 코드

data

  • 운영체제가 사용하는 자료구조들이 정의되있음
  • CPU, Memory, Disk 같은 하드웨어들을 관리하고 통제하기 위해 하드웨어 종류마다 자료구조를 만들어 관리
  • 프로세스(현재 실행중인 프로그램)들을 관리하기 위한 자료구조(=Process Control Block, PCB)

stack

  • 운영체제도 함수 구조로 코드가 짜여져 있기 때문에 함수 호출/리턴할 때 스택 영역을 사용
  • 사용자 프로그램마다 커널 스택을 따로 두고 있음 (사진 참고)

 

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

함수(function)란?

사용자 정의 함수

  • 자신의 프로그램에서 정의한 함수(내가 직접 작성한 함수)

라이브러리 함수

  • 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수(누군가 만들어놓은 함수)
  • 자신의 프로그램의 실행 파일에 포함되어 있음(사용자 정의 함수도 같이)

커널 함수

  • 운영체제 프로그램의 함수
  • 프로그램 안에서 가져다 사용 가능 (커널 함수의 호출 = 시스템 콜)
  • 내 프로그램 안에 포함된 함수가 아닌 커널 코드 안에 들어있는 함수
728x90