[CS] #4 Computer Science
컴퓨터 공학 문제 오답 위주로 정리한 내용입니다.
운영체제
하드웨어 시스템 자원을 관리하는 관리자
응용 프로그램이 필요로하는 시스템 자원을 제공하는 소프트웨어
여러 응용 프로그램 중 특정 시간에 어떤 응용 프로그램을 실행시킬지를 관리한다.
한번에 여러 응용 프로그램을 실행시킬 수 있도록 한다.
응용 프로그램을 사용하는 사용자를 관리한다.
운영체제는 직접 시스템 자원을 관리하며, 응용 프로그램과 라이브러리는 시스템 자원을 요청할 때 시스템 콜을 사용합니다. 그러나 라이브러리를 통하지 않고도 운영체제는 시스템 자원을 관리합니다.
커널
사용자가 운영체제 기능과 서비스를 조작할 수 있도록 하는 프로그램
하드웨어가 요청하는 시스템 자원을 제공하고 관리하는 관리자
운영체제가 하드웨어 시스템 자원을 관리해야 하는 이유
응용 프로그램이 Storage에 있는 데이터를 함부로 삭제하거나, 수정할 수 있기 때문
응용 프로그램이 함부로 컴퓨터 자체를 다운시키지 못하도록 하기 위함
특정 응용 프로그램이 하드웨어 자원을 독점해서 사용하는 것을 막기 위함
특별한 권한이 없는 응용 프로그램은 마음껏 하드웨어 자원을 사용하지 못하도록 하기 위함
CPU Protection Rings
인텔 CPU 에서 CPU Protection Rings은 Level(Ring) 0, Level(Ring) 1, Level(Ring) 2, Level(Ring) 3 이 있다.
통상적으로 Level(Ring) 3 을 사용자 모드, Level(Ring) 0을 커널 모드로 사용한다.
커널 모드에서는 특권 명령어를 실행하는데 사용한다.
커널 모드는 운영체제 커널이 사용하는 모드이다.
시스템 콜
프로그래밍 언어별로 시스템 콜 기반, 라이브러리를 제공하는 것이 일반적이다.
운영체제는 다양한 시스템 콜을 제공한다.
응용 프로그램이 운영체제에 시스템 자원을 요청할 때 사용한다.
시스템 콜은 운영체제가 제공하는 인터페이스로, 프로그래머가 직접 시스템 콜을 작성하는 대신 프로그래밍 언어별로 제공되는 라이브러리를 사용하여 시스템 콜을 호출한다.
응용 프로그램은 시스템 콜을 호출하거나 사용할 수 있지만, 시스템 콜을 제공하는 주체는 운영체제입니다.
시스템 콜이 호출되면 일반적으로 해당 시스템 콜을 처리하기 위해 사용자 모드에서 커널 모드로 전환됩니다. 이때 인터럽트는 처리되지 않습니다. 인터럽트는 시스템 콜 처리를 위해 중단되지 않습니다. 시스템 콜이 호출되면 사용자 모드에서 커널 모드로 전환되어 커널 내에서 해당 시스템 콜을 처리합니다.
시스템 콜 호출을 위해 강제로 코드에 인터럽트 명령 (int 0x80)을 넣어 CPU에 전달하는 것은 시스템 콜을 호출하는 한 가지 방법 중 하나입니다.
응용 프로그램
라이브러리를 사용하고, 라이브러리는 시스템 자원이 필요할 경우, 내부적으로 시스템 콜을 호출할 수 있다.
일반적으로 라이브러리는 응용 프로그램이 사용합니다.
쉘(Shell)
사용자가 운영체제 기능과 서비스를 조작할 수 있도록 인터페이스를 제공하는 프로그램
쉘은 주로 시스템 관리자가 운영체제 테마를 관리하는 프로그램이 아닙니다. 쉘은 사용자와 운영체제 간의 상호작용을 관리하는 역할을 하며 명령어를 실행하고 결과를 출력합니다.
쉘은 운영체제를 복구하는 프로그램이 아닙니다. 쉘은 사용자가 명령어를 입력하고 실행할 수 있는 환경을 제공하는 인터페이스입니다.
파일 관리자(File Manager)
GUI 환경에서 파일 관리를 담당
프로세스
메모리에 올려저서, 실행중인 프로그램을 의미함
프로세스는 실행 중인 프로그램을 의미하며 코드뿐만 아니라 데이터, 스택, 레지스터 상태 등을 포함합니다.
프로세스는 실행 중인 프로그램을 의미하며, 코드뿐만 아니라 프로그램이 필요로 하는 메모리와 시스템 자원 등을 포함합니다.
프로세스는 실행 중인 프로그램을 나타내며, 실행 중인 상태에서 관련된 리소스와 메모리를 갖습니다.
General Purpose OS
프로세스 실행시간에 민감하지 않고, 일반적인 목적으로 사용되는 운영체제
운영체제는 프로그램의 실행을 관리하며, 하드웨어 자원을 효율적으로 분배하고 제어합니다. 하지만 운영체제가 직접적으로 프로그램 실행 시간을 제어하는 것은 아닙니다.
실시간 운영체제는 실시간 응용 프로그램의 성능을 보장하기 위해 설계된 운영체제를 말하며, 일반적인 운영체제와는 목표와 특성이 다릅니다.
프로세스 스케쥴링
시분할 시스템: 다중 사용자 지원을 위해, 컴퓨터 응답시간을 최소화하는 시스템
멀티 태스킹: 단일 CPU에서 여러 응용 프로그램이 동시에 실행하는 것처럼 보이는 시스템
멀티 프로그래밍: 최대한 CPU를 일정 시간당 많이 활용하는 시스템
멀티 프로세싱: 여러 개의 실제 CPU(프로세서)가 시스템 내에서 병렬적으로 작업을 수행하는 구조
운영체제 스케쥴러
스케쥴러에서 실행되는 프로세스는 일반적으로 프로세스 상태 정보를 가지고 있다.
대표적인 프로세스 상태 정보로는 running, ready, block 등을 들 수 있다.
스케쥴러는 멀티 프로세싱을 지원하기 위한 핵심 운영체제 기술이다.
스케줄러는 응용 프로그램이 아닌 프로세스 단위로 스케줄링을 수행합니다. 하나의 응용 프로그램은 여러 개의 프로세스로 구성될 수 있고, 스케줄러는 이러한 프로세스들을 관리하여 실행 순서를 결정합니다.
프로세스 상태
실행(running) 상태는 프로세스가 CPU에서 실행 중인 상태를 의미한다.
준비(ready) 상태는 프로세스가 CPU에서 실행이 가능한 상태를 의미한다.
블록(block) 상태는 프로세스가 어떤 이벤트나 자원의 사용을 기다리는 상태를 의미한다.
생성(new) 상태는 프로세스가 생성된 상태를 의미한다.
멀티 프로세싱
멀티 프로세싱은 여러 개의 CPU에서 여러 응용 프로그램을 병렬로 실행해서, 실행속도를 높이는 구조를 의미한다.
멀티 프로세싱은 배치 프로세싱과는 달리 여러 응용 프로그램을 여러 CPU에서 실행할 수 있다.
멀티 프로세싱은 다양한 스케줄링 기법 중 하나가 아니다.
특정 응용 프로그램의 실행시간이 오래 걸릴 경우, 다른 응용 프로그램은 그만큼의 시간을 기다려야 하는 단점을 가지고 있지 않다.
멀티 프로세싱은 다른 말로 멀티 태스킹이라고도 불리지 않는다.
Round Robin
각 프로세스는 일정 시간 동안 CPU를 할당받고, 할당 시간이 지나면 다음 프로세스로 넘어가는 방식으로 실행 순서가 결정된다.
P1, P2, P3라는 프로세스가 순서대로 각 프로세스의 실행이 끝날 때까지 할당된 시간 동안 실행된다.
P1, P2, P3라는 프로세스가 순서대로 실행이 요청되면 실행 순서는 P1, P2, P3, P1, P2, P3 와 같은 형태로 동일한 실행순서를 가지는 것이 일반적이다.
P1, P2, P3라는 프로세스가 실행되다가 새로운 프로세스(P4)가 들어오면, P1, P2, P3의 현재 실행 중인 프로세스 중에서 다음으로 실행될 프로세스를 선택하고, 이후 P4를 실행한다.
우선순위 기반 스케쥴러
정적 우선순위 기반 스케쥴러는 프로세스의 우선순위가 미리 정해져있다.
동적 우선순위 기반 스케쥴러는 프로세스의 우선순위가 바뀔 수 있다.
우선순위가 높은 프로세스를 먼저 실행한다.
우선순위 기반 스케줄러는 각 프로세스의 우선순위에 따라 다른 실행 시간을 부여하며, 우선순위가 높은 프로세스에게 우선적으로 CPU를 할당합니다.
선점형 스케쥴러
하나의 프로세스가 다른 프로세스에 의해 CPU를 뺏기지 않고 끝나지 않으면 다른 프로세스는 CPU를 사용할 수 없도록 하는 스케줄러.
하나의 프로세스가 현재 CPU에서 실행 중인 프로세스를 대신에, 바로 CPU를 차지할 수 있도록 하는 스케쥴러
하나의 프로세스가 현재 CPU에서 실행 중인 프로세스가 실행완료된 후, CPU를 차지할 수 있도록 하는 스케줄러.
선점형 스케쥴러는 반드시 지원하지 않아도 되는 스케줄링 기법입니다. (이 부분은 "선점형"이 아닌 "비선점형" 스케쥴러에 해당합니다.)
인터럽트
인터럽트는 프로그램 실행 중에 프로그램을 종료하는 기능을 의미하지 않습니다.
인터럽트는 운영체제가 다운될 경우를 복구하는 기능을 의미하지 않습니다.
인터럽트는 CPU가 입출력 하드웨어 등의 장치를 제어하는 기능을 의미하지 않습니다.
CPU가 프로그램 실행 중에, 입출력 하드웨어 등의 장치나 예외상황에 발생하여 처리가 필요할 경우, CPU에 알려서 처리할 수 있는 기능을 의미함
일반적으로 인터럽트가 필요한 이유
입출력 하드웨어와의 커뮤니케이션을 위해 인터럽트가 필요한 경우가 많습니다.
선점형 스케쥴러를 구현할 때 인터럽트를 사용하여 현재 실행 중인 프로세스를 중단하고 다음 프로세스를 실행시킬 수 있습니다.
예외 상황 핸들링을 위해 인터럽트가 필요한 경우가 있습니다.
외부 인터럽트
외부 인터럽트는 주로 입출력 장치나 외부 이벤트로부터 발생하는 인터럽트를 의미합니다.
전원 이상은 외부 인터럽트의 하나로서 시스템 전원의 이상 상태를 나타내는 인터럽트입니다.
하드웨어 문제로 인해 발생하는 인터럽트 역시 외부 인터럽트에 해당합니다.
타이머 이벤트 역시 외부 인터럽트에 해당하며, 시간 경과와 같은 외부 이벤트에 의해 발생합니다.
프로세스 구조
TEXT (CODE): 프로그램 코드가 저장되는 부분으로, 실행 가능한 기계어 명령들로 구성됩니다.
- TEXT(CODE) 영역은 프로세스 구조 중에서 프로그램 코드가 저장되는 부분을 의미합니다. 여기에는 실행 가능한 기계어 명령들이 저장되며, 프로세스가 실행되는 동안 이 코드들이 차례로 실행됩니다. 이 영역은 프로세스의 프로그램 코드가 위치하는 곳으로, 실행 흐름을 결정하는 명령어들이 저장됩니다.
DATA: 전역 변수와 정적 변수가 저장되는 부분입니다.
STACK: 함수 호출 및 복귀 주소, 지역 변수 등이 저장되는 부분입니다.
- STACK은 프로세스 구조 중에서 함수의 호출과 복귀 주소, 지역 변수 등이 저장되는 부분입니다. 함수가 호출될 때마다 새로운 스택 프레임이 생성되며, 이 스택 프레임은 함수의 매개변수, 지역 변수, 복귀 주소 등을 저장합니다. 함수가 실행을 마치고 복귀할 때 이전 스택 프레임으로 돌아가서 실행을 계속합니다.
HEAP: 프로세스가 실행 중에 런타임에 필요한 메모리를 동적으로 할당하고 해제하는 데 사용되는 공간
- 주로 동적으로 생성된 객체, 배열, 데이터 구조 등이 Heap 영역에 저장됩니다.
SJF(Shortest Job First) 스케줄러
SJF 스케줄러는 현재 대기 중인 프로세스들 중에서 실행시간이 가장 짧은 프로세스를 먼저 실행시켜서 평균 대기 시간을 최소화하는 것
소프트웨어 인터럽트
계산 결과가 Overflow가 났을 때의 인터럽트는 소프트웨어 인터럽트에 해당합니다.
사용자 모드에서 허용되지 않은 명령 또는 공간 접근 시 일어나는 인터럽트 역시 소프트웨어 인터럽트에 해당합니다.
0으로 나누었을 때 일어나는 인터럽트 역시 소프트웨어 인터럽트에 해당합니다.
IDT(Interrupt Descriptor Table)
인터럽트 번호와 각각의 실행 코드를 가리키는 주소를 가진 데이터가 기록되어 있는 곳은 IDT(Interrupt Descriptor Table)입니다. IDT는 인터럽트와 예외 처리를 위한 주소 정보를 저장하는 테이블로, 운영체제에서 인터럽트나 예외 상황이 발생했을 때 어떤 코드를 실행해야 하는지를 결정하는 역할을 합니다.
배치 처리 시스템
배치 처리 시스템은 컴퓨터 프로그램 실행 요청 순서에 따라 순차적으로 프로그램을 실행하는 방식을 의미합니다. 이는 일련의 작업들이 일괄적으로 실행되며, 한 작업이 끝나기 전에 다음 작업을 시작하는 방식입니다. 배치 처리 시스템은 초기 컴퓨터 시스템에서 주로 사용되었으며, 사용자의 개입 없이 프로그램을 실행시키는 목적으로 설계되었습니다.
하나의 CPU에 여러 응용 프로그램이 동시에 실행하는 것처럼 보이도록 하는 것은 다중 프로그래밍 시스템을 의미합니다.
다중 사용자 지원을 위해 컴퓨터 응답 시간을 최소화하는 것은 시분할 시스템을 의미합니다.
여러 CPU에 하나의 프로그램을 병렬로 실행해서 실행 속도를 극대화하는 것은 멀티 프로세싱을 의미합니다.
프로그램 카운터(PC)
프로세스에서 다음 실행할 명령어의 주소를 가지고 있는 레지스터는 프로그램 카운터(PC)입니다. PC는 현재 실행 중인 명령어의 주소를 나타내며, 다음 실행될 명령어를 가리키는 역할을 합니다.