포스트

운영체제 3. 시분할 시스템을 어떻게 구현할까

운영체제 3. 시분할 시스템을 어떻게 구현할까

시분할 시스템을 어떻게 구현해야 될까?

실제로 시스템을 구현할 때 해결해야 할 문제점들을 생각해보자.

  1. 누가 스케쥴링을 해주는가?
  2. 입출력 장치를 어떻게 관리하는가?
  3. 응용 프로그램은 다른 응용 프로그램의 메모리 영역을 침범해선 안된다. 어떻게 보호하는가?
  4. 메모리는 재부팅하면 휘발된다. 프로그램이 실행되려면 메모리에 올라가 있어야 한다. 프로그램을 메모리에 올리려면, 어떤 프로그램이 메모리에 그 프로그램을 올리는 작업을 수행해야 한다. 초기에 키면 아무 프로그램도 실행되어 있지 않는데, 그 작업을 어떻게 하는가?
  5. 프로세스를 실행하다가 다른 프로세스를 어떻게 알고 스케쥴링 하는가?
  6. 다른 프로세스를 실행하다가 돌아 왔을때, 기존의 실행하던 정보를 어떻게 기억하는가?

누가 스케쥴링을 해주는가?

1~3번 문제는 모두 커널(Kernel) 이라는 개념을 도입해 해결한다. 커널은 무엇인가? 컴퓨터의 모든 자원을 관리하며, 다른 응용 프로세스에 자원을 할당해주는 중앙 프로세스다.

커널은 모든 프로세스의 우선 순위, 타임 슬라이스, 실행된 시간을 알고 있다. 어떤 프로세스가 I/O 작업 등으로 인해 자원을 직접 반환하거나, 시간 초과가 되면 기존의 실행하던 프로세스의 상태 정보를 잘 저장해두고, 우선순위가 가장 높은 프로세스를 실행한다. 이 자세한 과정은 추후 설명하겠다.

커널은 중앙 컨트롤 프로세스다. 이 커널은 두가지 측면이 존재한다. 응용 프로그램 입장에선 커널은 시스템 콜의 집합과 같다. 입출력 장치 입장에선 커널은 디바이스 드라이버 및 인터럽트 처리기(ISR)의 집합과 같다.

Pasted image 20250319150144.png

시스템 콜과 디바이스 드라이버 및 ISR은 서로 분리된 개념이 아니다. 시스템 콜이 디바이스 드라이버에 접근할 수 있고, 디바이스 드라이버가 시스템 콜을 호출할 수도 있다.