[CS] 컴퓨터시스템 구조(2)

do yeon kim·2022년 10월 14일
0

CS-운영체제

목록 보기
3/20

http://www.kocw.net/home/cview.do?cid=3646706b4347ef09

컴퓨터시스템 구조(2)

앞서 정리한 내용의 연장이다.

왼쪽에 있는 것이 일반적인 컴퓨터(호스트), 오른쪽에 있는 것이 io디바이스이다. 호스트 컴퓨터에 데이터를 입력하거나 출력하는 역할을 한다.

전체적인 흐름에 대해서 정리해보자면...

cpu는 memory에 올라와 있는 인스트럭션을 처리한다.
cpu는 메모리의 특정위치에 있는 기계어를 하나씩 읽어와서 실행한다.

그렇다면 특정위치란 메모리 어디에 있는 것을 말하는가?
cpu안에 있는 레지스터 중에서 메모리 주소를 가르키는 레지스터가 있다. 프로그램카운터 레지스터라고 한다.
그것이 가르키는 메모리 위치에서 인스트럭션을 가지고 와서 실행한다.
그후 프로그램카운터 레지스터는 다음 주소를 가르킨다.

cpu는 빠른 일꾼이다. 프로그램카운터레지스터가 메모리에서 가르키는 인스트럭션을 실행하는 것이다.
인스트럭션을 실행하고 나서 다음 인스트럭션을 실행전에 인터럽트가 있는지 확인한다.

만약 인터럽트가 있다면, 지금 프로그램카운터 레지스터가 가르키는 메모리 주소에서 읽어와서 실행하는 것이 아니라 잠시 중단 후, cpu를 누가 쓰고 있던 상관없이 제어권이 운영체제로 넘어간다.

운영체제는 인터럽트마다 인터럽트 상황에 맞게 처리하는 것이 커널로 정의되어 있다.
인터럽트 라인별로 인터럽트 백터가 있다. 인터럽트 종류별로 몇번 라인에 인터럽트가 들어 왔는지를 나타내는 엔트리가 있다.
실제 해야할 일이 인터럽트 처리 루틴이라고 한다.


cpu안에는 **mode bit**이 있어서 0이면 모든 것을 1이면 한정된 인스트럭션만 실행할 수 있다. 운영체제가 cpu를 가지면 mode bit은 0이 된다. 사용자프로그램이 cpu를 가지면 mode bit은 1이 된다. 한정된 것만 사용할 수 있다. I/O디바이스에 접근하는 인스트럭션은 mode bit이 0일 때만 가능하다. 그래서 사용자프로그램이 cpu를 가지고 인스트럭션을 실행하다가 I/O작업을 해야되면 운영체제한테 요청을 해야한다.(**시스템콜**) 그러러면 프로그램카운터 레지스터가 가르키는 위치를 운영체제로 점프해야하는데 점프하는 것인 mode bit이 1일때는 불가능하기 때문에 사용자프로그램이 운영체제에 서비스를 요청할 때는 시스템콜을 한다.

시스템콜은 운영체제에 있는 함수를 사용자프로그램이 요청하는 것이다.
바로 점프가 불가능하기 때문에 의도적으로 인터럽트 라인을 세팅해서 cpu제어권이 운영체제로 넘어가게 된다. 시스템콜은 소프트웨어 인터럽트에 해당한다.

소프트웨어 인터럽트는 프로그램이 직접 필요에 따라 인터럽트 라인을 세팅을 해서 운영체제를 부를 수 있는데 이를 소프트웨어 인터럽트 또는 트랩이라고 한다.
사용자프로그램이 필요에 따라서 운영체제에 요청하는 것을 트랩 중 시스템콜이라고 한다. 프로그램이 오류를 발생시킨경우 트랩이 발생할 수 있다.


I/O 컨트롤러가 cpu에 인터럽트를 걸수도 있지만, timer 도 인터럽트를 걸 수 있다. 운영체제가 cpu제어권 가지고 있다가, 사용자프로그램에 cpu제어권을 넘길때 mode bit을 1로 바꾸어 넘겨주기 때문에 보안적으로는 문제가 없다.
그런데 사용자프로그램이 cpu제어권을 놓지 않으면 안되기 때문에 timer에 시간세팅 후 넘게 되고, 일정 시간이 지나면 timer가 인터럽트를 걸어서 제어권이 운영체제로 넘어오게 된다.




동기식 입출력, 비동기식 입출력

동기식 입출력
I/O요청후 입출력 작업이 완료된 후, CPU제어가 사용자 프로그램에 넘어간다.

비동기식 입출력
I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어간다. I/O요청만을 하고 cpu제어권을 얻어서 다른 작업을 한다.

동기식 입출력을 구현하면 I/O작업이 끝날때 까지 기다려야 한다. 그러면 cpu도 낭비하게 된다. 또한 I/O장치도 낭비가 된다.
그러므로 cpu의 제어권을 넘겨서 계속 동작하게 한다.
I/O작업이 끝나면 컨트롤러가 cpu에 인터럽트를 걸어서 운영체제로 cpu가 넘어가서 다시 제어권이 넘어온다.

비동기식입출력 I/O가 진행상황과 상관없이 cpu제어권을 넘겨서 다른프로그램이 사용할수 있다.



DMA

cpu만 메모리에 접근할수 있다. 하지만 작은일 하나하나에 cpu가 모두 인터럽트를 당하면 계속해서 cpu제어권이 교환되어야 한다. 그런점을 방지하고자 DMA를 통해서 Memory에 접근할 수 있게 한다.



프로그램이 어떻게 컴퓨터에서 실행되는가?

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

물리적인 메모리에 바로 올라가는 것이 아니라 virtual memory를 걸치고서 물리적 메모리에 올라가게 된다.

virtual memory
프로그램을 실행시키면, 각각의 프로그램의 address space가 virtual memory에 형성된다. 주소공간을 각 프로그램마다 만들어진다. code, data, stack 등으로 이루어져 있다. 이후 주소변환을 통해서 물리적메모리에 올리게 되면, 프로그램이 실행이 되는 것이다.




이후 학습내용

0개의 댓글