운영체제란 무엇인가?
운영체제란 컴퓨터 전체를 진두지휘하는 핵심 프로그램을 말한다.
- CPU 스케줄링 : 프로그램들에게 CPU를 어떻게 할당하고 관리할 것인지 결정
- 메모리 관리 : 메모리를 어떻게 할당하고 관리할 것인지 결정
- 프로세스 관리 : 프로세스의 실행을 제어하고 관리
- 파일 관리 : 파일 시스템을 관리
- 입출력 관리 : 입출력 장치를 제어하고 활용
운영체제는 커널 영역에서 실행되며, 나머지 프로그램들은 사용자 영역에 적재된다.
주요 운영체제
- UNIX : 1969년 벨 연구소에서 개발된 운영체제로, 이식성이 좋고 커널 크기가 작으며, 소스 코드가 공개되었다.
- NINUX : UNIX의 영향을 받은 리누스 토발즈가 개발한 운영체제로, 소스가 공개되어 있다.
- POSIX : UNIX 운영체제 기반의 인터페이스로 리눅스도 POSIX를 준수한다.
- macOS, iOS : 애플의 운영체제로 UNIX기반이며 POSIX 규격을 준수한다.
커널과 쉘
- 커널 : 운영체제의 핵심 부분으로, 메모리에 상주하며 시스템 자원을 관리한다.
- 쉘 : 커널과 사용자 프로그램 간의 대화를 가능하게 해주는 명령어 해석기 이다.
이중 모드와 시스템 콜
- 이중 모드 : CPU 명령어 실행 모드로 커널 모드와 유저 모드로 나뉜다.
- 커널 모드 : 운영체제가 지원하는 함수를 실행할 수 있는 모드이다.
- 유저 모드 : 운영체제가 지원하는 함수를 실행할 수 없는 모드이다.
- 시스템 콜 : 프로그램이 실행 중 커널 모드로 전환해 운영체제 서비스를 요청하는 것이다.
프로세스와 스레드
- 프로세스 : 실행 중인 프로그램을 의미하며, 프로세스 당 최소 1개의 스레드를 가진다.
- PCB(Process Control Block) : 프로세스를 관리하기 위한 정보들이 담긴 자료구조이다
- Context Switch : 하나의 프로세스에서 다른 프로세스로 CPU 제어권을 넘기는 과정이다.
- 스레드 : 프로세스 내에서 실행의 단위로, 코드/데이터/힙 영역을 공유하며 독립적인 스택을 가진다.
- 유저 스레드 : 사용자 프로그램 내의 스레드
- 커널 스레드 : 커널 내에서 동작하는 스레드
CPU 스케줄링
- 스케줄링 알고리즘 : 프로세스들에게 CPU를 할당하는 방식이다.
- FCFS : 선입선처리 방식
- SJF :최단 작업 우선 방식
- Round Robin : 타임 퀀텀을 사용한 방식
- Priority : 우선순위 기반 방식
- Multi Level Queue : 우선순위 별로 여러 개의 레디 규를 사용한다.
- Multi Level Feedback Queue : 멀티 레벨 큐의 확장판으로, 프로세스의 우선순위를 동적으로 조절한다.
프로세스 동기화와 데드락
- 동기화 기법 : 뮤텍스, 세마포어, 모니터 등을 사용하여 동기화 문제를 해결한다.
- 데드락 : 프로세스들이 서로 자원을 기다리며 멈추는 상태로 예방/회피/검출 및 회복/무시 방법이 있다.
메모리 관리
- 페이징 : 프로세스의 주소 공간을 고정된 크기의 페이지로 나누고, 물리 주소 공간의 프레임에 할당한다.
- 페이지 테이블 : 논리 주소를 물리 주소로 변환한다.
- TLB : 페이지 테이블의 캐시 메모리
- 세그먼테이션 : 프로세스 주소 공간을 의미, 단위의 세그먼트로 나누어 물리 메모리에 할당
- 가상 메모리 : 프로세스의 일부분만 메모리에 올리고 실행하는 기법
파일 시스템
- 파일 : 보조기억장치에 저장된 관린 정보의 집합
- 디렉터리 : 파일을 모은 파일로, 트리 구조를 이룬다.
- 파일 할당 방식 : 연속 할당, 연결 할당, FAT, 색인 할당 등이 있다.
- 유닉스 파일 시스템 : i-node를 사용하여 파일 속성과 블록 주소 관리
- 저널링 기법 : 작업 로그를 통해 시스템 크래시 발생 시 빠르게 복구한다.
'◽️ Programming > ◽️ Computer Science' 카테고리의 다른 글
iOS Swift의 자료 구조, 알고리즘에 대해서 알아보자 (1) (0) | 2024.10.28 |
---|---|
[CS] 컴퓨터 구조에 대해서 자세하게 알아보자 (1) | 2024.07.15 |
객체지향 프로그래밍과 SOLID원칙 (0) | 2024.06.24 |
비트와 바이트 ( CS 50 강의 ) (1) | 2024.04.19 |
기억장치 ( CS 50 강의 ) (0) | 2024.04.08 |