운영체제(OS)의 기본 개념
운영체제의 주요기능
1. 프로세스 관리 (Process Management)
운영체제는 여러 프로세스를 동시에 관리하여, 각각의 프로세스가 CPU에서 실행될 수 있는 시간을 할당해줍니다.
- 프로세스 스케줄링 : 운영체제는 CPU 자원을 각 프로세스에 분배해줘서 여러 프로그램이 동시에 실행되는 것처럼 보이게 해줍니다.
이 때, 스케줄링 알고리즘이 사용됩니다
- FCFS(First-Come, First-Served) : 먼저 도착한 프로세스가 먼저 실행
- Round Robin : 각 프로세스에 동일한 시간 단위가 할당되어 순환적으로 실행
- 프로세스 상태 : 프로세스는 실행, 대기, 중지와 같은 상태를 가지고, 운영체제는 이 상태를 전환하여 프로세스를 관리합니다.
- 컨텍스트 스위칭 : 여러 프로세스가 번갈아 가며 CPU를 사용할 수 있도록 현재 실행 중인 프로세스의 상태(컨텍스트)를 저장한 후, 다른 프로세스의 상태를 복원하는 방식으로 CPU를 전환합니다.
2. 메모리 관리
운영체제는 메모리 관리를 통해서 각 프로세스가 사용할 수 있는 메모리 공간을 할당하고, 효율적으로 자원을 나누어서 사용하게 합니다.
- 가상 메모리 : 물리적 메모리가 부족할 경우, 운영체제는 가상 메모리라는 기법을 사용하여 디스크의 일부 공간을 메모리처럼 사용할 수 있도록 해줍니다.
3. 파일 시스템 관리
운영체제는 컴퓨터의 파일 시스템을 관리하여 데이터가 저장 장치에 어떻게 저장되고 읽혀야 하는지를 결정합니다.
- 파일 관리 : 데이터를 파일 단위로 저장, 디렉터리 구조를 통해 파일을 관리합니다. 파일은 이름, 확장자, 크기, 속성 등을 가집니다.
- 파일 권한 : 파일에 대한 읽기,쓰기,실행 권한등을 부여함으로써 시스템 보안을 유지합니다.
4. 입출력 장치 관리
여기서 입출력 장치는 컴퓨터 시스템과 외부 상호작용을 가능하게 하는 것을 말합니다. ex) 키보드, 마우스, 프린터 등등
- 장치 드라이버 : 운영체제는 각 하드웨어 장치와 통신하기 위해서 장치 드라이버를 사용합니다. 드라이버는 하드웨어에 명령을 보내고, 장치에서 데이터를 받아오는 역할을 해줍니다.
5. 보안과 접근 제어
운영체제는 시스템의 보안과 안정성을 유지하기 위해 각 사용자가 허용된 자원에만 접근할 수 있게 제어하고, 시스템 내에서 발생하는 악의적인 활동을 차단합니다.
운영체제의 종류
1. 데스크탑 운영체제
- Windows: 가장 널리 사용되는 운영체제 중 하나로, 직관적인 그래픽 사용자 인터페이스(GUI)와 광범위한 하드웨어 및 소프트웨어 호환성을 제공합니다.
- macOS: Apple이 개발한 운영체제로, Apple 하드웨어와 최적화된 안정성과 사용 편의성을 제공하는 운영체제입니다.
- Linux: 오픈 소스 운영체제로, 다양한 배포판이 있으며 개발자와 서버 환경에서 많이 사용됩니다.
2. 모바일 운영체제
- Android: 구글이 개발한 운영체제로, 스마트폰과 태블릿에서 가장 많이 사용됩니다.
- iOS: Apple의 모바일 운영체제로, iPhone 및 iPad에서 사용됩니다.
3. 서버 운영체제
- Windows Server: Microsoft가 개발한 서버용 운영체제로, 기업 환경에서 많이 사용됩니다.
- Linux 기반 서버: 비용 효율성과 높은 안정성 덕분에 웹 서버 및 데이터 센터에서 많이 사용됩니다.
커널 모드와 사용자 모드, 시스템 콜
커널 모드(Kernel Mode)와 사용자 모드(User Mode)는 CPU가 실행하는 2가지 실행 모드이다. CPU에게 주어진 실행 권한에 따라서 구분됩니다.
1. 커널 모드
커널 모드는 운영체제의 가장 특권 있는 실행 모드입니다. 커널 모드에서 실행되는 코드는 하드웨어 자원에 직접 접근할 수 있습니다.
예를 들어, 메모리, CPU, 입출력 장치 등의 하드웨어를 제어할 수 있습니다. 커널 모드는 운영체제의 핵심 기능을 담당하며, 시스템의 모든 자원에 대한 제어권을 가지고 있습니다.
2. 유저 모드
유저 모드는 일반 애플리케이션 코드가 실행되는 모드입니다. 프로세스가 유저 모드에서 실행될 때는 운영체제의 커널 자원에 직접 접근할 수 없습니다. 즉, 하드웨어 자원에 대한 접근 권한이 제한되어 있으며, 시스템의 안정성과 보안을 보장할 수 있습니다.
그런데 유저 모드에서 실행됬지만 커널 모드의 역할이 필요할 때가 있습니다. 그 때 시스템 콜이 호출됩니다.
3. 시스템 콜
- 시스템 콜은 유저 모드에서 실행되는 프로그램이 운영체제의 커널 모드로 요청을 보내는 인터페이스입니다.
- 프로그램이 하드웨어 자원이나 시스템 자원에 접근하려면 커널 모드에서만 권한을 가지고 있기 때문에, 유저 모드에서는 직접 하드웨어나 시스템 자원에 접근할 수 없습니다.
- 그래서 시스템 콜을 통해 유저 모드의 애플리케이션이 커널에게 특정 작업을 요청하고, 커널이 해당 작업을 수행한 후, 다시 유저 모드로 돌아가는 방식입니다.
EX)
1. 파일 입출력: 유저 모드에서 파일을 읽거나 쓰려면, 커널 모드의 파일 시스템을 통해야 합니다. 예를 들어, 파일을 읽기 위해서는 read()와 같은 시스템 콜을 호출하여 커널이 이를 처리하고, 결과를 유저 모드로 반환합니다.
2. 프로세스 관리: 새로운 프로세스를 생성하거나 종료하는 작업은 커널의 프로세스 관리 기능을 통해 이루어집니다. fork(), exec()와 같은 시스템 콜이 이에 해당합니다.
3. 메모리 관리: 메모리를 할당하거나 해제하는 작업은 커널이 담당합니다. 유저 모드는 malloc()이나 free()와 같은 함수를 호출할 수 있지만, 실제 메모리 관리는 커널에 의해 수행됩니다.
흐름 : 유저 모드 → 커널 모드
- 유저 모드에서 실행되는 프로그램이 시스템 콜을 호출합니다.
- 시스템 콜이 발생하면, CPU는 모드 전환을 하여 유저 모드에서 커널 모드로 전환됩니다.
- 커널은 해당 요청을 처리한 후, 결과를 유저 모드로 다시 반환하고, 모드를 다시 유저 모드로 전환합니다.
결론
- 유저 모드에서 실행되는 프로그램은 하드웨어나 운영체제의 중요한 자원에 직접 접근할 수 없습니다.
- 따라서 커널 모드의 작업을 필요로 할 때 시스템 콜을 호출하여 커널이 작업을 처리하도록 합니다.
- 이처럼 시스템 콜은 유저 모드와 커널 모드 간의 중요한 연결 고리 역할을 합니다.