참고: tech-interview-for-developer
운영체제란?
- 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 시스템 소프트웨어
- 하드웨어를 효율적으로 관리하며, 다른 응용 프로그램이 유용한 작업을 할 수 있도록 환경을 제공해 준다.
- Windows, Linuex, UNIX, MS-DOS 등
운영체제의 역할
프로세스 관리 |
|
저장장치 관리 |
|
네트워킹 |
|
사용자 관리 |
|
디바이스 드라이버 |
|
각 역할에 대한 설명
1. 프로세스 관리
운영체제에서 작동하는 응용 프로그램을 관리하는 기능
- 프로세스 스케줄링 및 동기화 : 프로세스의 생성과 제거, 시작과 정지, CPU 할당 등
- 프로세스 간 공유 자원 접근과 통신 등을 관리 (ex) 메시지 전달 기능)
2. 저장장치 관리
1차 저장장치에 해당하는 메인 메모리와 2차 저장장치에 해당하는 하드디스크, NAND 등을 관리하는 기능
- 1차 저장장치 관리 : Main Memory
- 프로세스에 메모리 영역을 할당 & 해제
- 각 메모리 영역 간 침범 방지
- 메인 메모리의 효율적인 사용을 위한 가상 메모리 기능
- 2차 저장장치 관리 : HDD, NAND Flash Memroy 등
- 파일 형식의 데이터 저장
- 저장된 파일 데이터 관리를 위한 파일 시스템을 관리 (FAT, NTFS, EXT2, JFS, XFS 등 많은 파일 시스템들이 개발되어 사용 중이다.)
3. 네트워킹
TCP/IP 기반의 인터넷에 연결하거나, 응용 프로그램이 네트워크를 사용하려면 운영체제에서 네트워크 프로토콜을 지원해야 한다. 현재 상용 OS는 다양하고 많은 네트워크 프로토콜을 지원한다.
4. 사용자 관리
운영체제는 하나의 PC를 여러 사용자가 사용하는 환경도 지원해야 한다.
- 각 계정을 관리하는 기능
- 사용자 별로 프라이버시와 보안을 위해 개인 파일에 다른 사용자가 접근할 수 없도록 관리
- 파일, 시스템 자원에 접근 권한을 지정할 수 있도록 지원
5. 디바이스 드라이버
운영체제는 시스템의 자원, 하드웨어를 관리한다.
시스템에는 여러 하드웨어가 붙어있는데, 이들을 운영체제에서 인식하고 관리하게 만들어 응용 프로그램이 하드웨어를 사용할 수 있게 만들어야 한다.
따라서 운영체제 안에 하드웨어를 추상화해 주는 계층**(= 디바이스 드라이버)**이 필요하다. 하드웨어의 종류가 많은 만큼, 운영체제 내부의 디바이스 드라이버도 많이 존재한다.
- 수많은 디바이스 드라이버들을 관리하는 기능
이처럼 운영체제는 사용자와 컴퓨터 하드웨어 사이에서, 하드웨어를 운영 관리하고 명령어를 제어하여 응용 프로그램 및 하드웨어를 소프트웨어적으로 제어 및 관리한다.
💡 가상 메모리
참고: 실제 메모리와 가상 메모리
초창기 물리적인 메모리의 크기보다 큰 애플리케이션을 실행하려면 메모리 부족으로 실행하지 못하는 RAM 부족 문제가 발생한다. 그래서 가상 메모리 방식이 등장했다.
현재 애플리케이션의 실행에 필요한 데이터만 RAM에 올려놓고, 나머지는 디스크에 저장해서 디스크를 RAM의 보조 기억 장치처럼 사용하는 방식
가상 메모리를 구현하기 위해서는 컴퓨터가 특수 메모리 관리 하드웨어를 갖추고 있어야 한다. = MMU (Memory Management Unit)
MMU (Memory Management Unit)
가상 메모리 주소를 물리 메모리 주소로 변환하고, 메모리를 보호하는 기능을 수행 메모리를 페이지로 나누어 각 페이지를 하나의 독립적인 항목으로 처리한다.
💡 IPC 통신 (InterProcess Communication)
참고: 프로세스 간 커뮤니케이션
각 프로세스는 서로 독립적으로 실행된다. 프로세스 간에 데이터를 교환하거나 특정 기능을 사용하기 위한 방법을 제공하는 것이 IPC이다.
다양한 IPC 기법이 존재한다.
주요 IPC 기법
- Message Queue : kernel space를 사용, 기본적으로 단방향 통신
- Shared Memory : kernel space에 메모리 공간을 만들고, 해당 공간을 변수처럼 접근하는 방식
- Pipe : kernel space를 사용, FIFO 정책으로 데이터 전송
기타 IPC 기법
- Signal : 커널 또는 프로세스에서 다른 프로세스에 어떤 이벤트가 발생되었는지를 알려주는 기법
- Socket : 소켓을 하나의 컴퓨터 안에서 두 개의 프로세스 간에 통신 기법으로 사용 가능
- file 사용, Semaphore,... 등
'CS' 카테고리의 다른 글
[CS 스터디] 프로세스 주소 공간 (0) | 2023.07.17 |
---|---|
[CS 스터디] 인터럽트 (Interrupt) (0) | 2023.07.17 |
[CS 스터디] 프로세스 (Process), 스레드 (Thread) (0) | 2023.07.13 |
[Java] Runnable, Thread (0) | 2023.07.11 |
[CS 스터디] Blocking & Non-Blocking I/O (0) | 2023.07.10 |