개발계발
운영체제란? 본문
운영체제
사용자를 위한 프로그램이 아닌 사용자가 실행하는 프로그램을 위한 프로그램이다.
즉, 사용자가 실행하는 응용 프로그램이 올바르게 실행되도록 돕고 자원을 할당해 주는 프로그램
이를 제대로 이해하기 위해서는 커널과 시스템 호출(System Call) 의 이해가 필요하다.
커널영역
메모리는 크게 커널영역과 사용자영역으로 나뉜다. 운영체제도 결국 프로그램 중 하나인데, 운영체제는 컴퓨터 부팅 시 메모리의 커널영역에 적재되어 하드웨어를 직접 조작할 수 있게 된다.(사용자 영역의 프로그램은 기본적으로 하드웨어 제어 불가)
그럼 사용자 프로그램이 하드디스크에 데이터를 저장하는 등의 하드웨어 제어를 하려면 어떻게 해야함???
-> 이 때, 시스템 콜이라는 개념이 나온다.
위 사진과 같이, 사용자영역에서 실행되던 프로그램이 하드웨어 제어를 system call을 요청하면 커널모드에서 실행 뒤 다시 사용자영역으로 복귀한다.
프로세스
지금까지 프로그램이라고 했지만, 정확히 얘기하면 실행 중인 프로그램은 프로세스(메모리에 적재되어 실제로 실행중인 프로그램)라고 한다.
일반적으로 CPU는 한 번에 하나의 프로세스만 실행할 수 있다.
하지만, 컴퓨터를 사용하면 프린트를 해야하는 프로세스 / 하드웨어를 써야 하는 프로세스 / 당장 실행해야하는 프로세스 / 키보드를 사용해야하는 프로세스 등 여러 프로세스가 동시에 실행되는 걸 알 수 있다.
이를 위해 운영체제는 위 예시처럼 다양한 프로세스를 관리해주는 것 뿐만 아니라, CPU 스케쥴링을 통해 어떤 프로세스부터 얼마나 CPU를 이용하게 하는 지 결정한다.
뿐 만 아니라, 컴퓨터 실행부터 종료까지 대부분의 기능을 OS가 처리하는데 이번 포스팅에서는 키워드 정도만 정리하고 자세한 내용은 따로 포스팅할 예정이다.
CPU 스케쥴링
어떤 프로세스가 CPU를 점유하고 얼마나 오래 사용하게 할 지 결정
메모리 관리
새로운 프로그램이 실행될 때 메모리를 할당하고, 메모리가 꽉 차 있는 경우 혹은 메모리 공간이 남아있을 경우의 처리 방법(가상 메모리)
입출력
프로세스가 하드웨어 제어가 필요할 때, 해당 프로세스의 작업을 백업하고 인터럽트 서비스 루틴을 제공해 입출력 작업을 수행
파일 시스템 관리
파일을 한 곳에 묶어 폴더로 관리하고, 생성 / 삭제하는 행위
비고
개발을 할 때 가상 머신이라는 말을 많이 들어봤을 텐데, 예를 들어 윈도우 운영체제에 리눅스를 가상 머신으로 띄우는 경우면 그 가상 머신은 하드웨어를 직접적으로 제어할 수 있는 OS인가? 의문이 들 수 있다.
-> NO이다. 가상 머신도 결국 사용자모드에서 실행되는 프로그램이고, 실제 커널 모드에 있는 운영체제를 통해 하드웨어를 제어하게 된다.