[Chapter 0] 운영체제 OT (2)

yoon052·2023년 4월 27일
0

운영체제

목록 보기
2/7
post-thumbnail

컴퓨터 시스템의 구조

I/O 컨트롤러 - 작은 CPU, 작은 전담 memory가 각각의 I/O 디바이스에 장착됨

PC의 전원을 켜면 부팅이 일어난다. (부팅은 OS가 memory에 올라가서 실행된다는 의미)

OS는 PC가 꺼지기 전가지 항상 실행되는 SW, program 이다.

OS의 핵심적인 부분커널이라고 부른다. 커널은 memory에 상주하면서 PC가 켜져있을 때는

언제나 동작하고 있다.

memory에 있는 OS를 제외한 나머지 공간은 program을 실행시키면서 채워진다.

각각의 응용 program들은 memory 공간을 조금씩 차지하며 공간을 공유하며 실행된다.

CPU의 작업 공간을 memory라고 부른다. 매 순간 CPU는 memory에 있는 기계어를 읽어서 연산을 진행한다.

그래서 program A가 메모리에 올라왔을 때, CPU가 program A의 기계어를 읽어서 연산(program을 실행)하고 있다면, A가 CPU를 사용하고 있다라고 말한다.

CPU의 작업공간은 memory이기 때문에 외부장치(I/O 디바이스)에 직접 접근할 수 없다.

CPU가 I/O 디바이스의 데이터가 필요할 때 I/O 컨트롤러에게 파일을 읽어와 달라고 부탁한다.

I/O 컨트롤러가 파일을 읽어와 본인의 작은 memory에 저장 후 파일을 읽어왔다고 CPU에게 신호를 전달하면 CPU가 I/O 디바이스의 작은 memory에 있는 데이터를 가져다가 메인 memory에 올려놓는다.

CPU 스케줄링

CPU는 짧은 시간 내에 여러 program들이 번갈아 할당되기 때문에 OS의 CPU 스케줄링이 필요하다. CPU 스케줄링이란 어떤 program에게 CPU 사용권을 줄지 생각해 적용하는 것이다.

누구에게 CPU 사용권을 줄지, 얼마의 시간동안 CPU 사용권을 줄지 등도 생각해봐야 한다.

모든 HW적 관리는 OS의 대행을 통해서 이루어진다.

OS가 다른 program에게 CPU 사용권을 넘겨주면서도, CPU를 무한히 쓰게 해주지는 않는다.

CPU 스케줄링은 어떤 한정된 시간동안 CPU를 쓰게 하고, 그 시간이 지나면 CPU의 사용권을 빼앗아오는 것을 OS가 주도하고 있다.

OS가 CPU를 사용할 때는 뭐든지 할 수 있지만, program에게 CPU를 넘겼다면 OS도 어쩌지 못한다. 이 때는 OS가 program에게 CPU를 빼앗아오거나 제어할 수 잇는 방법이 없다.

그래서 CPU를 무한정 사용할 수 없게 하는 CPU 스케줄링은 OS 혼자 하는 것은 아니고, 독점을 막기 위한 특정 HW장치가 있어서 OS와 이 장치가 서로 협조해 CPU 스케줄링을 한다.

메모리 스케줄링

OS가 한정된 memory를 어떻게 쪼개어 쓸 것인지 생각해 관리한다.

디스크 스케줄링

디스크에 들어온 요청을 어떤 순서로 처리할지 생각한다.

CPU가 연산 작업 중에 I/O 데이터가 필요해서 I/O 디스크에 데이터를 요청한다.

디스크는 CPU에 비해서 처리속도가 100만배 정도 느리다. 수치상 비교가 안되게 느린 수준이다.

memory도 CPU에 비해 처리속도가 100배 정도 느리지만 cache memory를 통해 간극을 줄였다.

디스크에서 I/O 파일을 읽어올 긴 시간 동안, CPU에 I/O 데이터를 요청한 program은 할 수 있는 일이 없다. 그래서 해당 program의 다음 순서인 program으로 CPU 점유권이 넘어간다.

여러 program이 CPU를 번갈아쓰듯이 I/O program에도 요청이 번갈아 도착할 수 있다. 요청이 온 순서대로 디스크 요청을 처리할 수 있지만 이 방법은 굉장히 비효율적이다.

비록 나중에 들어온 요청이라도 순서를 뒤바꿔서 디스크가 작업을 더 효율적으로 처리할 수 있으면 그렇게 작업한다.

엘리베이터 스케줄링 - 디스크 스케줄링과 비슷한 스케줄링

1층에서 버튼을 누르고, 바로 100층에서 버튼을 눌렀다.

2층으로 올라가는 도중에 2층에서 버튼을 누른다면, 2층에서 늦게 눌렀지만

같은 방향으로 가는 거니까 같이 태워 간다면 효율적인 일이다.

디스크도 마찬가지이다. 디스크 head가 존재해 엘리베이터 스케줄링과 비슷하게 기능한다.

빠른 CPU와 느린 I/O 장치 사이의 속도차를 어떻게 극복하면 좋을까?

  • 캐싱과 인터럽트로 속도차를 극복할 수 있다.

  • 캐싱

    메모리와 I/O 디스크 사이에서도 속도 차이가 난다. 디스크에서 파일 요청이 올때마다, 디스크에 접근하지는 않는다. 똑같은 파일 요청을 후에 다시 원하는 경우에는 굳이 디스크까지 가지 않고 memory에 보관했다가 꺼내쓴다.

  • 인터럽트

    CPU에서 A program을 실행하다가 I/O 요청을 받게 되면, CPU가 직접 요청을 처리하지 않는다. I/O 디바이스마다 붙어있는 I/O 컨트롤러에게 I/O 요청을 부탁한다. I/O 컨트롤러가 파일 요청에 대한 작업을 하는 동안, CPU는 그걸 기다리지 않고 당장 일할 수 있는 부분을 찾아서 진행한다. CPU는 A 다음에 CPU 큐에 대기하고 있던 B program으로 넘어가 B의 기계어를 처리한다. 이런 과정은 CPU 스케줄링에 포함된다.

    CPU스케줄링을 간단히 말하면 ‘CPU는 놀고 있으면 안된다. 일할 수 있다면 계속 일하고 있어야 한다’고 말할 수 있다.

    A의 I/O 요청을 수행 완료하고, A의 요청 파일이 다 읽혀졌다고 I/O 컨트롤러가 알려야한다. I/O 컨트롤러가 인터럽트라는 신호를 통해 CPU에게 A의 요청 파일이 준비되었음을 알린다. CPU는 기계어를 한 개 끝낼 때마다 인터럽트가 왔는지 확인한다.

    인터럽트가 확인되면 CPU의 권한이 자동적으로 OS에게 넘어간다. OS는 인터럽트 신호가 온 이유를 확인하고 자신의 역할을 수행한다. OS가 A의 요청을 보고 A의 작업을 수행가능하겠다고 판단한 후에, CPU 스케줄링에 A를 배치한다.

    인터럽트는 I/O 디바이스라는 느린 장치에 작업을 시켜놓고, CPU가 자기 할 일을 하고 작업이 끝나면 인터럽트를 받도록 한다. 인터럽트 신호를 받으면 CPU 운영권이 OS에게 넘어가서 인터럽트 이후의 작업들을 OS가 처리한다.

profile
개발자 지망생

0개의 댓글