운영체제는 무엇이고 어떠한 역할을 하고 있나?
운영체제
--
모든 프로그램들은 하드웨어가 필요하다.
어떠한 동작(계산)을 하기 위해서는 "CPU"가 필요하고,
이미지처럼 데이터를 저장하기 위해서는 "하드 디스크(보조기억장치)"가 필요한 것처럼
프로그램을 실행할 때 필요한 요소(하드웨어)들을 "시스템 자원" or "자원"이라고 부른다.
CPU, 메모리, 보조기억장치, 입출력장치 등과 같은 컴퓨터 부품들은 모두 "자원"이라고 볼 수 있으며,
모든 프로그램은 실행되기 위해서는 반드시 자원이 필요하다.
운영체제는
실행할 프로그램이 올바르게 실행되도록 필요한 자원을 할당해 주고,
사용자와 컴퓨터 간의 상호작용을 원활하게 해주는 소프트웨어(프로그램)다.
운영체제는
브라우저, 게임과 같은 프로그램으로,
운영체제 또한 메모리에 적재되어야 한다.
다만 운영체제는 컴퓨터가 부팅될 때 바로 실행되어야 하는 프로그램이므로
다른 프로그램과는 달리 컴퓨터가 부팅될 때 메모리 내부의 "커널 영역"에 따로 적재되어 실행된다.
운영체제 외의 프로그램들은 모두 "사용자 영역"에 적재된다.
운영체제가 효율적인 자원 관리를 하기 위해 메모리를 두 가지 영역으로 구분하여 사용한다.
- 커널 영역
- 사용자 영역
커널 영역 (Kernel Space)은
운영체제를 실행시키기 위해서 필요한 메모리 공간으로
헤드웨어 자원 관리, 프로세스 스케줄링, 메모리 관리, 파일 시스템, 네트워크 스택 등
원영체제의 핵심 기능이 해당 영역에서 수행된다.
사용자 영역 (User Space)은
전체 메모리에서 커널 영역을 제외한 모든 메모리 공간으로
사용자가 이용할 응용 프로그램들이 실행되는 메모리 영역이다.
즉, 운영체제는 "커널 영역"에 적재되어
"사용자 영역"에 적재된 프로그램들에게 자원을 할당하고 올바르게 실행되도록 돕는다.
비유를 하자면
원영체제는 인력사무소의 관리자라고 할 수 있다.
어떠한 작업(프로그램)을 하기 위해서 필요한 인원(자원)들을 효율적으로 배치, 분배, 관리 등을 도와준다.
--
커널 (kernel)
--
매우 다양한 운영체제가 존재하기 때문에
운영체제가 제공하는 기능, 서비스 또한 다양하다.
이렇게 다양한 운영체제가 존재하고, 각 제공하는 서비스 종류 또한 다양하지만
그중에서 가장 핵심적인 서비스들이 존재한다.
이러한 운영체제의 핵심 서비스를 담당하는 부분을 "커널(Kermel)"이라고 부른다.
커널은
운영체제가 설치된 모든 기기에 존재하며, 심장과도 같은 존재다.
커널을 가리킬 때 그냥 운영체제라고 말할 수 있을 정도로 운영체제의 심장과도 같은 존재
어떤 커널을 사용하는지에 따라서 프로그램이 하드웨어(자원)를 이용하는 형태가 달라지며,
이로 인해 컴퓨터 전체의 성능도 달라질 수 있다.
운영체제가 제공하는 서비스 중에서 커널에 포함되지 않는 서비스가 존재한다.
그중에 대표적인 것이 "사용자 인터페이스"다.
사용자 인터페이스(UI, User Interface)는
사용자가 컴퓨터와 상호작용할 수 있도록 도와주는 통로로
- 그래픽 유저 인터페이스 (GUI, Graphical User Interface)
- 커맨드 라인 인터페이스 (CLI, Command Line Interface)
가 존재한다.
--
이중 모드(Daul Mode)
--
운영체제는
사용자가 실행하는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여 자원을 보호한다.
만약 응용 프로그램이 마음대로 자원에 접근하게 되면
자원이 질서 없이 관리될 것이고, 접근하여 실수를 하게 되면 컴퓨터 전체에 큰 악영향을 끼칠 수 있다.
그래서 운영체제는
응용 프로그램들이 자원에 접근하려고 할 때 오직 자신(운영체제)을 통해서만 접근할 수 있도록 한다.
즉, 운영체제는 하드웨어(자원)에 접근하는 것을 지키는 문지기 역할과 비슷하며,
하드웨어(자원)에 접근하려면 꼭 운영체제에 도움을 요청하여
응용 프로그램 대신 운영체제가 자원에 접근하여 요청한 작업을 수행한다.
위 그림처럼
운영체제의 문지기 역할은 "이중 모드"로써 구현된다.
이중 모드는
CPU가 명령어를 실행하는 모드를 크게 "사용자 모드"와 "커널 모드"로 구분하는 방식이다.
사용자 모드 (User Mode)는
운영체제 서비스를 제공받을 수 없는 실행 모드다.
( = 커널 영역의 코드를 실행할 수 없는 모드)
그러다 보니 CPU는 하드웨어 자원에 접근하는 명령어를 실행할 수 없어서
일반적인 응용 프로그램은 자원에 접근할 수 없다.
일반적인 응용 프로그램들은 기본적으로 "사용자 모드"로 실행된다.
그래서 응용 프로그램들이 자원에 접근하지 못하는 것이다.
커널 모드 (Kernel Mode)는
운영체제 서비스를 제공받을 수 있는 실행 모드다.
( = 커널 영역의 코드를 실행할 수 있는 모드)
그래서 CPU가 커널 모드로 명령어를 실행하면 자원에 접근하는 명령어를 비롯한 모든 명령어를 실행할 수 있다.
운영체제는 "커널 모드"로 실행된다.
그래서 운영체제는 자원에 접근이 가능하다.
CPU의 플래그 레지스터에서 슈퍼바이저 플래그로
현재 CPU가 "사용자 모드"인지 "커널 모드"인지 확인할 수 있다.
--
시스템 호출(System Call)
--
"사용자 모드"로 실행되는 프로그램이
자원에 접근하는 운영체제 서비스를 제공받으려면
운영체제에 해당 요청을 보내 "커널 모드"로 전환되어야 한다.
이렇게 운영체제 서비스를 제공받기 위한 요청을 "시스템 호출"이라고 부른다.
즉, "사용자 모드"로 실행되는 프로그램은 "시스템 호출"을 통해
"커널 모드"로 전환하여 운영체제 서비스를 제공받을 수 있다.
- 응용 프로그램(사용자 모드)에서 자원 접근(운영체제의 서비스 요청)을 위해 "시스템 호출"
(시스템 호출 발생 시 CPU는 "사용자 모드"에서 "커널 모드"로 전환) - 운영체제(커널)에서 "시스템 호출"에 대한 작업을 수행
(이 과정에서 자원에 접근이 필요하면 하드웨어에 접근 가능) - "시스템 호출"의 작업이 완료되면, CPU는 다시 "사용자 모드"로 전환한다.
(이때, 사용자 모드에서 실행 중이었던 프로그램의 상태가 복원되고, 커널에서 처리된 결과가 해당 프로그램으로 반환 후 이어서 실행이 진행된다.)
"시스템 호출"은 일종의 인터럽트다.
(소프트웨어적인 인터럽트)
인터럽트는 입출력장치에 의해 발생하기도 하지만,
특정 명령어에 의해 발생하기도 하는데,
이를 "소프트웨어 인터럽트"라고 부른다.
--
운영체제의 핵심 서비스 (간단히 훑어보기)
--
운영체제에는 여러 핵심 서비스들이 존재하지만
그중 일반적인 핵심 서비스 종류
- 프로세스 관리
- 자원 접근 및 할당
- 파일 시스템 관리
프로세스 관리
프로세스는
간단하게 실행 중인 프로그램을 의미한다.
컴퓨터는 사용하는 동안 메모리에 새로운 프로세스들이 마구 생성되고,
사용되지 않는 프로세스는 메모리에서 삭제된다.
일반적으로는 하나의 CPU가 한 번에 하나의 프로세스만 실행할 수 있기 때문에
CPU는 프로세스들을 조금씩 번갈아 가며 실행을 하고 있는 것이다.
(ex. A프로세스 실행 중에 B프로세스로 실행을 전환, 그리고 다시 A프로세스로 실행 전환 등 반복)
즉, 운영체제는 다양한 프로세스들을 확실하게 관리하고 실행할 수 있어야 한다.
여러 프로세스가 동시에 실행되는 환경에서는
"프로세스 동기화"가 필수적이며,
"교착 상태"에 대한 것도 해결해야 한다.
프로세스 동기화는
여러 프로세스가 동시에 실행될 때,
서로 간섭하지 않고 일정한 순서대로 자원을 사용할 수 있도록 하는 메커니즘
교착 상태는
여러 프로세스가 서로 자원을 점유하고 있어,
해당 점유가 풀릴 때까지 다른 자원이 필요함에도 불구하고
진행하지 못하는 상태를 의미한다.
자원 접근 및 할당
모든 프로세스는 실행을 위해서 자원이 필요하고,
운영체제는 프로세스들이 사용할 자원에 접근하고 조작함으로써 프로세스에게 필요한 자원을 할당해 준다.
여기서 운영체제가
- CPU
- 메모리
- 입출력장치 (+ 보조기억장치)
를 관리하여 원활하게 구현하여 자원을 접근 및 할당을 해준다.
파일 시스템 관리
운영체제가
파일과 디렉터리를 저장, 조직, 검색, 보호하는 방식으로,
컴퓨터의 저장 장치에 데이터를 효율적이고 안전하게 저장 및 접근할 수 있도록 하는 기능이다.
--
'CS > 운영체제' 카테고리의 다른 글
프로세스 동기화 (0) | 2024.09.29 |
---|---|
CPU 스케줄링 알고리즘 종류 (1) | 2024.09.28 |
CPU 스케줄링 (0) | 2024.09.26 |
스레드 (+ 멀티프로세스와 멀티스레드) (1) | 2024.09.25 |
프로세스 (0) | 2024.09.23 |