운영체제 - 컴퓨터 시스템 구조(2)

WooHyeong·2022년 12월 8일
0

OS(Operating System)

목록 보기
3/7

컴퓨터 시스템 구조

지난 강의에 이어서 2-2 강좌 정리를 시작한다. 이번 강의에서는 지난 강의 내용을 다시 몇 번 짚어주기도 했고, 전체 흐름 파악이라 가볍게 넘어가고자 한다.

지난 강의에서 보았던 컴퓨터 시스템 구조를 다시 한번 보고 넘어간다.


출처 : 이화여자대학교 반효경 교수님 '운영체제' 강의

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

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

프로그램이 입출력 요청을 했을 때 입출력 작업이 완료된 후에야 그 프로그램이 후속 작업을 수행할 수 있는 방식

프로그램 A가 I/O 요청을 하게 되면 I/O 요청이 완료되기까지는 시간이 소요된다. CPU의 명령 수행 속도는 빠르지만, 입출력 연산은 상대적으로 느리다. 그래서 I/O 작업이 완료될 때까지 CPU를 프로그램 A에게 대기하는 것은 CPU의 낭비를 초래하게 된다.

그래서 I/O 작업을 하는 동안 CPU를 프로그램 A에게서 뺏어서 프로그램 B에게 할당한다.★

I/O 작업이 완료되면 디바이스 컨트롤러는 인터럽트를 통해 CPU에게 알려준다.

프로그램 A의 I/O 작업을 위해 CPU를 프로그램 B에게 할당하는 동안, 프로그램 B 또한 I/O 작업을 요청할 수도 있다. A와 B의 I/O 작업이 동일한 곳(ex. 디스크)에서 이뤄지면 디바이스 컨트롤러는 연산 순서를 바꿔서 수행할 가능성이 있다. A의 작업이 먼저 이뤄져야하는데 B의 작업이 먼저 이뤄지게 되는 경우 말이다.

이러한 작업으로 인해 의도치 않은 결과를 초래할 수 있기 때문에 입출력 요청의 동기화를 위해 장치별로 큐(Queue)를 두어 요청한 순서대로 처리할 수 있도록 한다.

  • I/O는 커널을 통해서만 할 수 있다.
  • I/O 요청 후 입출력 작업이 완료된 후에야 CPU의 제어권이 사용자 프로그램에 넘어간다.
  • 사용자 프로그램이 I/O 요청을 커널에게 하면, 그 I/O 장치에 맞는 디바이스 드라이버를 거치고 실제 하드웨어를 통해서 I/O를 한다.
    • 구현 방법 1.

      • I/O가 끝날 때까지 CPU를 낭비시킨다.
      • 매시점 하나의 I/O만 일어날 수 있다.
    • 구현 방법 2.

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

동기식 입출력은 I/O 작업이 끝날 때가지 아무 일도 안하고 기다려야 하므로 cpu가 낭비되기 때문에 구현 방법 2로 동기식 입출력을 구현한다.

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

  • I/O가 시작 된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에게 즉시 넘어간다.
  • 사용자 프로그램이 I/O 요청을 운영체제 커널한테 해서 실제로 I/O 작업이 진행된다. 그동안 바로 cpu 제어권을 얻어서 다른 작업들을 한다.
  • I/O 요청을 했지만, 지금 I/O 결과를 보지 않고, 즉 디스크에서 읽어오는 데이터와 상관없이 할 수 있는 작업들이 있다.
    I/O 결과를 가져오는 동안 그 작업을 하도록 프로그램을 구성할 수 있다.

동기식 입출력과 비동기식 입출력 모두 I/O의 완료는 인터럽트로 알려준다.


DMA (Direct Memory Access)

메모리는 CPU에 의해서만 접근할 수 있는 장치이다.
메모리에 접근하기 위해서는 인터럽트 를 발생시켜 CPU가 작업을 하도록 한다.

But, 모든 메모리 접근 연산이 CPU에 의해서만 이뤄질 경우 I/O 장치가 메모리 접근을 원할 때마다 CPU에게 인터럽트를 요청하게 되면서 CPU의 업무가 방해를 받게 되어 CPU의 효율성이 떨어지는 문제가 발생한다.

이러한 비효율성을 극복하기 위해 CPU 이외에 메모리 접근이 가능하도록 한 장치를 DMA(Direct Memory Access)라고 한다.

DMA

일종의 컨트롤러로서, CPU가 입출력 장치들의 메모리 접근 요청에 의해 자주 인터럽트 당하는 것을 막아주는 역할

  • 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용한다.
  • CPU의 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송한다. → 인터럽트로 인한 CPU의 방해 감소
  • 바이트(byte) 단위가 아니라 블록(Block)이라는 큰 단위로 로컬 버퍼에서 정보를 메모리로 읽어온 후에 CPU에게 인터럽트를 발생시켜 해당 작업의 완료를 알려준다.

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


서로 다른 입출력 명령어

cpu에서 실행할 수 있는 instruction에는 메모리만 접근하는 instruction이 있고, I/O 장치에 접근해야 되는 instruction이 있다.

두 개의 instruction은 별개로 정의되어 있다. I/O 디바이스에도 주소가 있어서 특정 주소에 대해서 I/O 장치에 접근하는 instruction을 실행하면 해당 디바이스에 접근할 수 있다.

하지만 Memory Mapped I/O 라는 것에서 I/O 장치들에게 메모리 주소를 줘서, 메모리에 접근하는 instruction을 통해서 I/O를 할 수 있게 된다.


저장 장치 계층 구조

출처 : 이화여자대학교 반효경 교수님 '운영체제' 강의

Primary : cpu에서 직접 접근 가능하다.

cpu에서 접근하려면 바이트 단위로 접근 가능한 매체여야 한다.

Secondary : cpu가 직접 접근하여 처리가 불가능하다.

Register : cpu 안에 위치한다.
Cache Memory : 레지스터와 메인 메모리 사이에 속도 차이를 완충하기 위한 역할을 한다.
캐싱 기법 : 상대적으로 용량이 적은 빠른 저장 장치를 이용해 느린 저장 장치의 성능을 향상시키는 총체적 기법.
당장 사용되거나 빈번히 사용될 정보를 빠른 저장장치에 선별적으로 저장함으로써 두 저장장치 사이의 속도를 완충시킨다.

특징

  1. Speed
    계층의 위로 갈수록 속도가 빠른 매체를 사용하고 있다.

  2. Cost
    계층의 위로 갈수록 단위 공간당 가격이 비싸기 때문에 용량이 적다.

  3. Volatility (휘발성)
    Register, CacheMemory, Main Memory는 휘발성 매체이고,
    Magnetic Disk, Optical Disk, Magnetic Tape는 비휘발성으로 구성되어 있다.

Caching : 빠른 저장소로 정보를 읽어들여서 사용하는 것(재사용 목적). 처음 요청 때는 아래에서 위로 데이터를 읽어 간다. 그러나 한 번 위로 읽어 들여놓으면 같은 것을 두번째 요청할 땐 밑에까지 가지 않고 위에서 바로 읽을 수 있다.


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

출처 : 이화여자대학교 반효경 교수님 '운영체제' 강의

프로그램은 보통 실행 파일 형태로 파일 시스템(하드 디스크)에 저장되어있다.
실행 파일은 실행시키면 메모리로 올라가서 프로세스가 된다.

그러나 물리적인 메모리에 바로 올라가는 것이 아니라 중간에 한 단계를 더 거친다. 그 단계가 바로 Virtual Memory 이다.

출처 : 이화여자대학교 반효경 교수님 '운영체제' 강의

어떤 프로그램을 실행시키게 되면 그 프로그램의 주소 공간(Address space)이 생기게 된다.
프로그램마다 0번지부터 시작되는 독자적인 주소 공간이 만들어지게 된다.
주소 공간은 code,data, stack으로 구성된다.

  • code : cpu에서 실행할 기계어 코드를 담는다.
  • data : 변수(전역 변수, 자료구조)와 같이 프로그램이 사용하는 자료구조를 담고 있다.
  • stack : 함수를 호출하거나 return할때 data를 쌓았다가 꺼내가는 용도로 사용하는 영역이다.

주소 공간의 내용들을 물리적인 메모리에 올려서 실행한다.
커널은 컴퓨터를 부팅하면 메모리에 항상 상주하여 올라가 있지만, 사용자 프로그램들은 실행시키면 주소 공간이 생겼다가, 프로그램을 종료하면 사라지게 된다. 프로그램의 주소 공간을 통째로 다 올려놓으면 메모리가 낭비가 되기 때문에, 다 올려놓는 것이 아닌 당장 필요한 부분만 올려놓는다.

필요하지 않은 부분은 swap area라는 디스크 공간에 내려놓고 있는다.


커널 주소 공간의 내용

출처 : 이화여자대학교 반효경 교수님 '운영체제' 강의

커널도 하나의 프로그램이기 때문에 code, data, stack으로 이루어진 주소 공간으로 구성되어 있다.

  1. Code
    운영체제 커널에는 어떤 코드들이 있는가?
    운영체제는 자원을 효율적으로 관리하는 일을 하므로, 이와 관련된 코드들이 있고, 사용자에게 편리한 인터페이스를 제공하는 것과 관련된 코드들이 있다.
    또한 인터럽트를 받으면 CPU를 얻게 되는데, 인터럽트마다 무슨 일을 처리해야할 지에 대한 코드도 있다.

  2. Data
    운영체제는 cpu, memory, disk 같은 하드웨어를 직접 관리하고 통제하는데, 이런 하드웨어를 관리하기 위한 하드웨어 종류마다 자료구조를 하나씩 만들어서 관리한다.

  3. Stack
    운영체제도 함수 구조로 code가 짜여 있으므로 함수를 호출하거나 return할 때 이 stack 영역을 사용해야 한다.
    어떤 사용자 프로그램이 이 커널의 코드를 실행 중인가에 따라서, 사용자 프로그램마다 커널 스택을 따로 둔다.


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

함수(funciton)

  1. 사용자 정의 함수

    • 자신의 프로그램에서 정의한 함수
  2. 라이브러리 함수

    • 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수
    • 자신의 프로그램의 실행 파일에 포함되어 있다.
  3. 커널 함수

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

본 포스팅은 이화여대 반효경교수님 운영체제 강의를 바탕으로 작성하였습니다.

profile
화이링~!

0개의 댓글