티스토리 뷰

반응형

컴퓨터 시스템 구조

1. 컴퓨터 시스템의 구조

컴퓨터 시스템 구조에 들어가기전에 용어를 먼저 정리해보자.

CPU란

CPU는 내부적으로 크게 3가지로 나눌 수 있습니다. 연산을 수행하는 산술논리장치(ALU), 제어 명령을 전달하는 컨트롤 장치(CU), 결과 값을 일시적으로 기억하는 레지스터(Register)가 이에 해당됩니다. 아래 그림은 CPU의 구조를 그림으로 도식화 한 것이다.

Memory란

CPU의 Register의 용량은 매우 작다. 그래서 정보를 저장해 두었다가 필요할 때 읽어 들여 이용할 수 있는 주 기억 장치가 필요하다. 이 주기억장치에는 컴퓨터가 켜지면 운영체제, 사용자 프로그램등이 메모리공간에 올라가게된다. CPU는 주기억장치에서 프로그램들의 명령어등을 읽어와 작업을 수행한다. 주 기억창치로는 ROM, RAM 등이 있음.

I/O Device란

입출력 장치란, 사용자가 원하는 문자나 그림의 데이터를 컴퓨터로 전달하는 하거나 출력하는 장치이다. 입력장치의 종류에는 키보드, 마우스이 있고 출력 장치로는 모니터, 프린터등이 있다.

컴퓨터 시스템은 크게 위 3단어로 구성된다고 볼 수 있다. 아래 그림은 컴퓨터 시스템 구조를 도식화한 것이다.

간단하게 컴퓨터 시스템 흐름을 설명하면 컴퓨터에 전원이 들어오게 되면 메인메모리에 운영체제가 올라간다. 이때 모든 운영체제 코드가 올라가는게아니라 시스템이 돌아가기위한 핵심적인 부분이 먼저올라가는데 이부분을 커널이라 한다. 이러한 이유는 모든 코드가 메모리에 올리게되면 자원낭비가 심하기 때문이다.

그 이후에 CPU는 메모리의 운영체제 프로그램들을 읽어 운영체제를 실행한다. 운영체제가 시작되고 다른 프로그램들을 실행시키면 마찬가지로 메인메모리에 올라가게 된다. 이때 CPU는 메인메모리에 명령어주소를 레지스터에 저장하는데 이 레지스터이름은 PC레지스터라 한다. 그 이후 각각의 프로그램들은 I/O 디바이스 사용이 필요할 수 있는데 이러한 요청은 운영체제한테 요청을해야한다. 이러한 요청을 시스템콜이라고 한다. 이렇게 프로그램들이 직접 I/O디바이스를 제어하지 않는 이유는 많은 이유가있지만 가장큰 이유는 보안때문이다.

프로그램의 요청을 받은 운영체제는 I/O 디바이스의 컨트롤러에게 데이터 입출력 처리를 요청을 한다. 그리고 I/O 디바이스 컨 틀롤러들은 입출력을 받게 되면 Interrupt를 발생시켜 CPU에게 작업이 완료됐다고 알리게 된다. CPU는 I/O 디바이스에 버퍼에 가서 데이터를 읽어와 메인 메모리에 올려놓게 된다. 이러한 작업이 반복되는 것이 컴퓨터 프로그램의 동작 원리이다. 아래 그림은 좀 더 CPU와 메모리 I/O 디바이스들을 세부 분화한 그림이다.

2. CPU와 I/O연산

위 구조에서 먼저 I/O 디바이스와 CPU 관계를 봐보자. 컴퓨터에 대한 연산은 CPU가 처리한다. 반면 I/O 디바이스들에 대한 연산은 각각의 디바이스 컨트롤러들이 처리한다. 컨트롤러들은 각각의 디바이스들의 CPU 역할을 한다. 이렇기 때문에 둘은 서로 동시에 처리가 가능하다. 그리고 각각의 컨트롤러로부터 들어오고 나오는 데이터들은 로컬 버퍼에서 관리한다. 로컬 버퍼는 램과 같은 역할을 한다.

데이터가 입출력되었는지는 CPU가 처리하는 게 아니라 각각의 컨트롤러들이 연산을 하고 이것을 CPU에게 인터럽트를 발생시켜 보고하는 형태로 처리된다. CPU는 항상 메모리에 명령어를 읽어와 작업을 수행하는데 매 명령어를 읽어오기 전 인터럽트가 발생하였는지 확인하고 인터럽트가 발생했으면 인터럽트를 먼저 처리하고 그 이후에 명령어를 처리한다.

Device Controller

각각의 디바이스들을 I/O연산, 제어관리를 하는 역할을 한다.(각각의 디바이스들의 CPU 역할)
Device Driver
운영체제가 각각의 디바이스를 접근하게 하기위한 인터페이스역할을하는 소프트웨어.
펌웨어
디바이스가 동작하기위한 소프트웨어

Buffer

각각의 디바이스 컨트롤러들이 명령을 내려 디바이스의 데이터를 읽어오거나 출력할때는 데이터를 저장하는 공간이다. (각각의 디바이스들의 램역할)

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

그다음 CPU와 각각의 I/O 디바이스 컨트롤러 디바이스들 간에 인터럽트 처리를 확인해 보자. 기본적으로 운영체제에는 인터럽트가 발생했을 때 각각의 인터럽트에 대한 처리가 운영체제 안에 코드로 작성되어 저장되어있다. 이 다양한 인터럽트에 대해 각각의 처리해야 할 업무들을 정의해놓은 것이 인터럽트 처리 루틴이다. CPU는 인터럽트가 발생하면 하던 일을 멈추고 인터럽트가 발생했을 대 수행해야 할 코드영역으로 가서 정의된 작업을 하게 된다. 이때 수행되는 일을 좀 더 자세히 보면 다음과 같다. CPU 가 먼저 로컬 버퍼에 있는 내용을 프로그램 B가 사용할 수 있도록 메모리로 전달하고, 이제 프로그램 B가 CPU를 할당받을 경우 다음 명령어를 수행할 수 있음을 표시해둔다.

인터럽트는 크게 2가지고 인터럽트로 나누어지는데 하드웨어 인터럽트와 소프트웨어 인터럽트가 있다. 하드웨어 인터럽트는 하드웨어가 발생시키고 소프트웨어는 소프트웨어가 인터럽트를 발생시킨다는 차이가 있다. 운영체제는 인터럽트 루틴을 쉽게 찾아가기 위해 인터럽트 벡터를 가지고 있다. 인터럽트 벡터는 인터럽트 종류마다 번호를 정해서, 번호에 따라 처리해야할 코드가 위치한 부분을 포인터로 가리키고 있는 자료구조를 말한다. 실제처리는 인터럽트 루틴에서 이루어진다.

Interrupt

CPU는 I/O 디바이스들이 데이터를 입력할때까지 기다리는게 아니라 자신의 일을 계속 처리하고있게 된다. 이때 I/O 디바이스들에게 입력이 이루어지면 각각의 디바이스 컨틀롤러가 인터럽트를 발생시켜 CPU에게 알려준다. 이때 발생시키는 신호를 인터럽트라고 한다.

인터럽트 루틴

운영체제에는 인터럽트가 발생했을 때 각각의 인터럽트에대한 처리가 운영체제 안에 저장되어있다. 이 다양한 인터럽트에대해 각각의 처리해야할 업무들을 정의 해놓은것이 인터럽트 처리 루틴이다.

인터럽트 벡터

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

System Call

응용프로그램이 운영체제의 서비스를 받기위해 커널함수를 호출하는것.

Timer

특정 프로그램이 무한루프에 빠져 CPU를 독점하는 경우를 막기위해 존재한다. 만약 특정프로그램이 CPU할당시간을 초과한다면 timer는 인터럽트를 발생시켜 CPU의 권한을 운영체제에게 다시 넘긴다.

mode bit

CPU에서 지금 실행되는 프로그램이 프로그램인지 운영체제인지 구분해주는 역할

스택영역

실행중인 함수에서 다른 함수를 호출한경우 호출된 함수의 종료후 원래 함수의 실행이던 위치로 돌아오기 위해 복귀 주소를 저장하는 위치이다.

데이터 영역

전역변수등 프로그램이 사용하는 각종 데이터가 저장되는 공간이다.

코드 영역

프로그래머가 작성한 코드가 기계어 명령형태로 저장되는 영역이다.

DMA

CPU가 각각의 I/O디바이스를 통해 데이터를 읽어 메인메모리에 프로그램에게 전달하게되면 CPU효율이 떨어지기때문에 주변기기의 인터페이스 장치에 제어권을 주어 직접 주기억장치와 데이터를 주고 바는 방식으로 액세스하여 데이터를 전송하는 방법

4.인터럽트 핸들링

인터럽트 핸들링이란 인터럽트가 발생한 경우에 처리해하는 절차를 의미한다. 인터럽트는 앞에서 말한 대로 발생 시에만 CPU에 의해 운영체제 코드 부분 즉 인터럽트 루틴을 실행한다. 인터럽트가 발생하지 않는다면 CPU는 계속 계속해서 사용자 프로그램의 명령어를 처리할 것이다.

CPU가 사용자 프로그램 처리 중 인터럽트가 발생하면 사용자 프로그램의 현재 수행 중이던 주소와 부가적인 정보를 저장해야 한한다. 왜냐하면 인터럽트가 발생하면 레지스터의 기존 데이터들이 지워지기 때문이다.

운영체제 커널 내에는 현재 시스템 내에서 수행되는 프로그램들을 관리하기 위한 자료 구조인 프로세스 제어 블록(PCB : Process Control Block) 을 두고 있다. 이 자료 구조 중 일부는 인터럽트가 발생했을 때 프로그램의 어느 부분이 수행되던 중이었는지를 저장하기 위한 자료구조로 사용된다.

이 자료구조를 바탕으로 인터럽트가 발생했을 때 인터럽트 처리를 하고 CPU는 다시 원래 프로그램으로 돌아올 수 있다.

PCB

운영체제 커널 내에는 현재 시스템 내에서 수행되는 프로그램들을 관리하기 위한 자료 구조인 프로세스 제어 블록(PCB : Process Control Block) 을 두고 있다. 이 자료 구조중 일부는 인터럽트가 발생했을때 프로그램의 어느부분이 수행되던 중이었는지를 저장하기 위한 자료구조로 사용된다.

4.입출력 구조

동기식 입출력

입출력(I/O)이란 컴퓨터 시스템이 컴퓨터 외부의 주변 장치들과 데이터를 주고받는것을 말한다. 입출력 방식에는 동기식 입출력과 비동기식 입출력이 있다. 동기식 입출력(synchronous I/O)은 입출력 요청후 입출력 작업이 완료된후에야 CPU의 제어권이 그 프로그램에게 다시 넘어갈 수 있는 방식을 말한다. 따라서 동기식 입출력에서는 입출력 연산이 끝날 때까지 CPU는 아무 일을 수행할 수 없다. 기본적으로 CPU의 명령수행속도는 빠른반면 외부 장치에서 데이터를 읽어오는 등의 입출력 연산은 상대적으로 속도가 느리다. 그럼으로 CPU가 입출력 연산을 기다리는것은 비효율적이다. 따라서 일반적으로 프로그램이 입출력을 수행중인 경우 CPU를 다른 프로그램에게 이양해 CPU가 계속쉬지 않고 일할수 있도록 관리한다. 그리고 그 입출력을 수행하고있는 프로그램은 CPU를 할당하더라도 명령을 수행을 못하는데 이것을 "봉쇄 상태(blocked state)" 로 전환 시킨다고 말한다. 봉쇄 상태의 프로그램에게는 CPU를 할당하지 않고, CPU를 할당하면 곧바로 작업 수행 가능한 프로그램들에게만 CPU를 할당하게 된다.

그러나 여기에서 문제가 하나 발생할 수 있다. 앞서 설명한 것처럼 입출력이 수행중일 때 다른 프로그램에게 CPU를 양도하게 되므로 다수의 입출력 연산이 동시에 요청되거나 처리될 수 있다. 예를들어 A라는 프로그램과 B라는 프로그램이 있다고 가정하자. 이때 두 프로그램은 동시에 하나의 파일에 접근하려고한다. 여기에서 개발자는 A라는 프로그램이 먼저 파일을 수정할것을 예상하고 개발했다고 가정해보자. 하지만 컨트롤러는 이것의 순서를 보장하지 않는다. 이러한 문제점을 해결하기 위해서 I/O장치 별로 큐를 두어 요청한 순서대로 처리할 수 있도록 한다. 큐는 아시다시피 FIFO의 구조로 이루어지기 때문에 들어온 순서대로 처리하게 될것이다.

위의 내용을 보면 크게 I/O동기식 입출력은 크게 2가지 구현 방법이 있다.
구현방법 1

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

구현방법 2

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

비동기식 입출력

비동기식 입출력은 입출력 연산을 요청한 후에 연산이 끝나기를 기다리는 것이 아니라 CPU의 제어권을 입출력 연산을 호출한 그 프로그램에게 곧바로 다시 부여하는 방식을 말한다. 프로그램 중 데이터를 입출력할 때 입출력 결과를 기다려야 하는 경우가 있을 수 있고, 반대로 입출력 결과는 상관없이 다른 일을 수행할 수 있는 기능들이 있을 것이다. 비동기식에서는 입출력 결과에 상관없이 수행할 수 있는 일들을 먼저 처리하고 입출력의 결과가 필요한 프로그램들은 입출력이 완료된 후에 작업을 수행한다.

위 그림은 동기식 입출력과 비동기식 입출력을 비교해 보여주는 그림이다. 동기식 입출력 같은 경우에는 응답이 돌아올 때까지 입출력을 요청했던 프로그램은 봉쇄 상태가 되고 인터럽트가 발생하면 그때 입출력에 관한 프로그램이 봉쇄 상태가 풀리게 되고 CPU를 할당받을 수 있는 상태가 된다.

반면 비동기식 프로그램은 입출력을 요청한 프로세스에게 곧바로 다시 주어지며, 입출력 연산이 완료되는 것과 무관하게 처리 가능한 작업부터 처리한다. 한편, 비동기식 입출력에서도 입출력 연산이 완료되면 동기식과 마찬가지로 인터럽트를 통해 이를 CPU에게 알려준다. 이러한 구체적인 예를 통해 정리해보면 다음과 같다.

  1. 프로그램 A가 실행중에 디스크에서 데이터를 읽어오는 명령을 만나게되면 A는 시스템콜을 발생시킨다.
  2. CPU는 지금까지 프로그램 A의 작업을 멈추고 현재 수행상태를 저장한후에, 인터럽트에 의해 처리 되어야할 커널 루틴으로 이동한다.
  3. 처리 루틴으로 이동하게되면 CPU는 컨트롤러에게 입출력 연산을 요청하게 된다.
  4. 디바이스 컨트롤러는 A가 요청한 데이터를 디스크로부터 읽어와 버퍼에 저장한다.
  5. 읽어오는 동안 프로그램 A는 CPU를 B 프로그램에게 넘겨주게 된다. (이때 A프로그램은 봉쇄상태가 가되고 CPU 명령을 수행하려고해도 수행하지 못함)
  6. 디바이스컨트롤러가 작업이 다 끝나면 하드웨어 인터럽트를 발생시킨다.
  7. 인터럽트가 발생하면 B프로그램을 처리작업을 잠시 미뤄 두고 인터럽트 처리루틴에 가서 인터럽트를 처리한다.
  8. 그럼 인터럽트 처리루틴은 컨틀러에서 데이터를 읽어와 A프로그램에게 올리게되고 A프로그램은 다시 CPU 줄을 기다려야한다.
  9. 그 후 다시 프로그램 B로 돌아가 작업을 수행하게된다.

일반적으로는 동기식 입출력을 사용한다. 이 때 운영체제는 장치별로 입출력 처리를 기다리는 프로세스를 줄세워 관리한다.

5. DMA(Direct Memory Access)

일반적으로 I/O 디바이스들이 메인 메모리에 바로 접근할 수 없고 I/O 디바이스들은 인터럽트를 발생시켜 CPU가 I/O 디바이스들의 데이터를 읽어 메인 메모리 프로그램에 올린다. 하지만 CPU는 프로그램의 명령어를 처리하는 것 외에도 항상 각각의 I/O 디바이스들 인터럽트에 대한 처리도 해야 하기 때문에 기존 CPU 작업들을 방해하게 된다.

이러한 비효율성을 극복하기 위해 CPU 대신에 I/O 디바이스들에 인터럽트를 처리할 컨트롤러를 하나 더 둔다. 이것이 바로 DMA 장치이다. DMA가 있음으로 더 이상 CPU는 하던 작업을 멈추고 각종 I/O디바이스들의 인터럽트를 처리할 필요가 없어진다. 단지 DMA Controller에 인터럽트만 처리하게 되면 된다. 이때 DMA는 바이트 단위가 아니라 블록 단위로 데이터를 모아서 CPU에게 인터럽트를 발생시킨다. 이러한 방법으로 CPU의 효율을 높일 수 있다.

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

6. 저장 장치 구조

주기억장치

컴퓨터 시스템을 구성하는 저장 장치는 주 기억 장치와 보조기억장치다. 주 기억장치는 보통 메모리라고 부르며 전원이 나가면 저장되었던 내용이 모두 사려 저버리는 휘발성(volatile)의 RAM을 매체로 사용하는 경우이다.

보조기억장치

보조기억장치는 전원이 나가도 저장된 내용을 기억할 수 있는 비휘발성(nonvolatile)의 마그네틱 디스크를 흔히 사용한다. 보조 기억장치는 크게 두가지 부분으로 파일시스템용과 스왑 영역이다.
파일 시스템
전원이 나가도 유지해야할 정보가있으면 그것을 파일형태로 보조기억장치에 저장한다.
스왑 영역
메인 메모리의 크기는 한정되어있고, 가격이 비싸다. 그러므로 다수의 프로그램이 메인 메모리에 올라가 동시에 수행될경우 메모리 공간이 부족한경우가 많다. 그렇기 때문에 한번에 모두 메인메모리에 올려놓는게 아니라 프로그램이 돌아가기 위한 핵심적인 부분만 메인 메모리에 올려놓고 나머지는 스왑영역에두고 필요할 때마다 메인 메모리로 불러오게 된다.

7. 저장 장치의 계층 구조

컴퓨터의 시스템을 구성하는 저장 장치부터 느린 저장 장치까지 단계적인 계층 구조로 이루어진다. 빠른 저장 장치는 단위 공간당 가격이 높기때문에 적은 용량을 사용하며, 느린 저장 장치는 가격이 저렴해 대용량을 사용하는 반면 접근속도가 느리다는 약점이 있다. 아래그림은 이 내용을 그림으로 표현한것이다.

상위 저장 장치 계층으로 갈수록 접근 속도가 월등히 빠르지만 용량은 상대적으로 적다. 하지만 당장 필요한 정보만을 선별적으로 저장하게 되면 마치 하위에 있는 큰 용량의 저장 장치를 가지고 있는 것과 비슷한 성능 효과를 낼 수 있다. 예를 들면, 캐시메모리는 레지스터와 메인 메모리 사이에 존재한다. 캐시메모리는 메인 메모리보다 용량이 작다. 그러나 여러 가지 캐슁기법을 이용해 적은 용량의 캐시메모리를 사용해서도 메인 메모리와 같이 큰 용량을 가진 것처럼 효율적으로 관리할 수 있다.

캐슁 기법 이란 상대적으로 느린 저장장치에 있는 내용중에 당장 사용되거나 빈번히 사용될 정보를 빠른 저장장치에 선별적으로 저장하여, 두 저장 장치 사이의 속도를 완충 시키는 기법을 의미한다.

8. 하드웨어의 보안

일반적으로 사용하는 운영체제는 여러 프로그램이 동시에 실행될 수 있는 다중 프로그래밍 환경에서 실행된다. 그러므로 각 프로그램들이 다른 프로그램의 실행을 방해하거나 프로그램 간에 서로 충돌이 일어날 수 있기 때문에 이러한 문제를 해결하기 위한 각종 보안 기법이 필요하다. 하드웨어적인 보안을 유지하기 위해서 운영체제는 기본적으로 두 가지 모두의 운영을 지원한다. 커널 모드와 사용자 모두가 이에 해당한다.

커널 모드는 운영체제가 CPU의 제어권을 가지고 운영체제 코드를 실행되는 모드로서, 이 모드에서는 모든 종류의 명령을 다 실행할 수 있다. 사용자모드는 일반 사용자 프로그램이 실행되며 제한적인 명령만을 수행할 수 있다.

그러나 중요한 연산을 운영체제만이 수행할 수 있도록 수행버리면 제어가 필요 없게된다. 사용자 프로그램이 CPU를 가지고 있는 동안에는 운영체제가 CPU를 선점할 수 없으므로 사용자 프로그램을 감시할 수 있는 방법이 없게된다. 그러므로 이러한 상황을 방지하기위해 모드비트 라는 하드웨어적인 자원이 필요하다.

모드 비트가 0으로 세팅되어 있으면 커널 모드를 의미하고, 모드 비트가 1이면 사용자 모드를 의미한다. CPU는 보안과 관련된 명령을 수행하기 전에는 모드 비트를 조사해 모드 비트가 0으로 세팅된 경우에만 그 명령을 수행한다.

CPU가 운영체제를 점유하고 있을 때 운영체제는 모드 비트를 0으로 사용하다가 사용자 프로그램에게 CPU를 넘길 때에는 모드 비트를 1로 세팅하고 넘기게 된다. 보통 모드 비트가 0이 되는 경우에는 이와 같이 운영체제에게 권한이 넘어가거나 인터럽트가 발생하여 인터럽트 루틴을 처리해야 할 경우이다.

커널모드

운영체제가 CPU의 제어권을 가지고 운영체제 코드를 실행되는 모드로서, 이 모드에서는 모든 종류의 명령을 다 실행할 수 있다.

사용자 모드

일반 사용자 프로그램이 실행되며 제한적인 명령만을 수행할 수 있다.

모드비트

모드비트를 통해 CPU가 운영체제 함수를 호출할 수 있는지 결정하게된다. 모드 비트가 0이면 커널모드를 의미하고 1이면 사용자 모드를 의미한다.

9. 메모리 보안

여러 프로그램이 메모리에 동시에 올라가서 실행되기 때문에 하나의 사용자 프로그램이 다른 사용자 프로그램이나 운영체제가 위치한 메모리 영역을 침범할 수 있기 때문이다. 적어도 인터럽트 벡터와 인터럽트 처리 루틴이 있는 곳은 각별한 보안이 필요하다. 이러한 문제를 해결하기 위해서 두 개의 레지스터를 이용해 현재 접근하려는 메모리가 한 법적인지 체크함으로써 메모리를 보호한다.

이두가지는 기준 레지스터(base register)와 한계 레지스터(limit register)이다. 기준 레지스터는 실행되고 있는 프로그램이 합법적으로 접근이 시작되는 메모리 주소를 보관하고 있고, 한계 레지스터는 해당 프로그램이 기준 레지스터로부터 접근할 수 있는 범위를 저장하고 있다. 사용자 프로그램은 이 두 개의 값의 범위만 접근할 수 있게 된다. 이 범위를 벗어난 접근을 하게 되면 예외 인터럽트가 발생하게 된다.

아래그림은 기준레지스터 한계리지서터의 내용을 표현한 그림이다.

10. CPU의 보호

일반적으로 CPU는 컴퓨터 시스템내에 하나밖에 존재하지 않기 때문에 특정 프로그램이 CPU를 독점해 무한 반복문을 수행하는 등 부적절한 방법으로 CPU를 독점한다면 다른프로그램들 및 운영체제가 CPU를 획득하지 못하게 된다. 이와같이 CPU가 하나의 프로그램의 독점을 막기위해 타이머라는 하드웨어가 존재 한다.
타이머는 정해진 시간이 지나면 인터럽트를 발생시켜 운영체제에게 CPU의 제어권을 이양시키는 역할을 한다. 타이머는 정해진 시간이지나면 인터럽트를 발생시키는데 이 인터럽트 처리 루틴의 내용은 CPU의 제어권을 CPU에게 넘기는것이다.

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

사용자 프로그램이 I/O 디바이이스등을 통해 데이터 입출력을 할 수 없다. 보통 이러한 작업은 운영체제를 통해서 해야한다. 운영체제에는 I/O디바이스들에 데이터 입출력명령이 코드로 구현되어 있다. 그래서 보통 사용자 프로그램들은 인터럽트를 발생을 시켜 I/O디바이스등 입출력을하는데 이러한 것을 가리켜 시스템 콜이라고한다. 시스템콜은 소프트웨어적인 인터럽트로서 사용자 프로그램이 시스템콜을 할경우 트랩이 발생해 CPU에 대한 제어권이 운영체제로 넘어간다. 그러면 운영체제는 해당하는 시스템콜을 처리하기위해 처리루틴으로가서 시스템 콜 에 맞는 처리 루틴을 수행한다.

참조


반응형

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

[OS-1] 운영체제란?  (0) 2019.04.06
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함