운영체제(Operating System)는 컴퓨터 하드웨어의 리소스를 관리해주면서 동시에 여러 애플리케이션이 작동할 수 있는 환경을 제공해주는 소프트웨어다.
분류 | 내용 |
---|---|
하드웨어 자원 | CPU, 메모리, 키보드, 마우스, 네트워크 카드 |
소프트웨어 자원 | 각종 프로그램, 데이터 |
운영체제는 크게 커널과 인터페이스로 이루어져 있다.
커널은 운영체제 핵심 기능을 모아놓은 곳으로 프로세스 관리, 메모리 관리, 파일 시스템 관리, 입출력 관리, 프로세스 간 통신 관리 등을 수행한다.
인터페이스는 커널에 사용자 명령을 전달하고 실행 결과를 사용자에게 알려주는 역할을 수행한다.
시스템 콜은 커널을 보호하기 위해 만든 인터페이스다. 사용자나 응용 프로그램으로부터 컴퓨터 자원을 보호하기 위해 자원에 직접 접근하는 것을 차단한다.
드라이버는 커널과 하드웨어의 인터페이스를 담당한다. 하드웨어의 종류가 다양하고 각 하드웨어에 맞는 인터페이스를 개발하기 어렵기 때문에 커널은 입출력의 기본적인 부분만 제작하고, 하드웨어의 특성을 반영한 소프트웨어를 제작하여 커널이 실행될 때 함께 실행되도록 한다.
작업1 : CPU 사용 후 I/O 장치 사용 작업
작업2: CPU만 사용하는 작업
멀티 프로그래밍(Multi-Programming)은 여러 작업들이 동시에 메모리에 올라간다. 작업1이 수행되는 동안 CPU가 대기 상태로 들어가고 작업1이 I/O를 수행할 때 작업2는 CPU를 사용함으로써 유연성을 제공하여 효율성을 높일 수 있다.
멀티 태스킹(Multi-Tasking)은 각 작업들에게 자원 할당 시간을 정해줘서 그 시간이 지나면 다른 작업에게 자원을 넘겨준다. 테스크가 CPU가 스케줄링에 따라 작업을 조금씩 번갈아가면서 수행한다. 빠른 속도로 스위칭하면서 처리하면 동시에 처리되는 것처럼 보인다. CPU의 실행 시간을 나누는 단위를 타임 슬라이스라고 한다.
인터럽트란 CPU가 작업을 처리하고 있을 때, I/O 디바이스 등의 장치나 예외 상황이 발생하여 처리가 필요한 경우 신호를 주어 처리할 수 있도록 하는 것을 말한다. 인터럽트가 발생되면 OS는 해당 명령어(인터럽트를 발생시킨)의 주소를 기억한다. 그 후 인터럽트가 끝나면 해당 주소로 돌아가 다음 명령어를 수행하거나 대기 상태로 돌아간다.
운영체제는 interrupt-driven 방식으로 동작한다. 인터럽트가 발생하면 운영체제는 자원을 적절하게 분배하여 해당 요청을 처리하는 구조다.
H/W interrupt : I/O, 메모리, CPU 관련 인터럽트
S/W interrupt : 프로그래밍 도중 발생하는 에러, 운영체제 서비스들에 대한 요청인 System Call
운영체제는 한 작업의 에러로 인해 자원을 계속해서 점유하거나 컴퓨터 동작을 저해할 수 있기 때문에 보호해야 할 수단을 필요로 한다.
1) 예방하기 위한 첫 번째 방법은 Dual-Mode Execution
이다. 운영체제는 기본적으로 사용자에게 인터페이스를 제공하는 User Mode와 자원들을 직접 관리하는 Kernel Mode로 구분된다. 커널에서의 작업을 컴퓨터의 중요한 부분에 해당하는 작업이기에 사용자가 직접 작업하다가 문제가 생길 시, 컴퓨터 전체에 영향을 끼친다. 따라서 User mode
와 Kernel Mode
로 나눠 사용자가 접근하지 못하도록 한다.
사용자가 User Mode에서 작업을 명령하면 Kernel Mode에서 이를 처리해야 하는데, 연결고리 역할을 하는 것이 Mode-Bit
이다. 운영체제는 User mode에 들어온 명령어와 일치하는 Mode-Bit를 가진 Kernel Mode의 명령어를 찾아 커널에서 실행한 후, 결과를 User mode에 넘기고 일을 마무리한다. 이러한 행위를 System Call
이라고 한다.
2) 두 번째 방법으로 Timer
가 있다. Timer는 무한 루프나 자원의 독점을 막는 역할을 한다. Timer는 프로세스들에게 자원을 사용할 수 있는 특정 시간을 부여하고 해당 시간이 지나면 인터럽트를 발생시키고 프로세스를 종료시켜 CPU를 계속 점유하는 것을 방지한다.