(1) 운영체제에 대한 관점
1. 자원 관리자 관점의 OS
- OS는 자원이 효율적으로 사용되도록 하는 관리 책임이 있다.
- 프로세스 간에 발생할 수 있는 자원에 대한 경쟁 및 충돌을 해결한다.
- 자원의 상태를 추적하고, 어떤 프로세스가 언제 어떤 자원을 얼마나 사용할 것인지를 결정하는 정책을 수립하고 자원의 할당과 회수를 한다.
▶ 운영체제가 관리하는 네 가지 범주의 자원
- 프로세스 관리 기능(프로세서의 할당과 회수)
- 프로세스들에 대한 CPU의 할당 및 회수를 한다.
- Process Scheduler 역할 : 어떤 프로세스에게 CPU 사용 권한을 줄 것인지를 결정한다.
- 기억장치 관리 기능(메모리 공간 관리)
- 프로세스 할당과 회수를 위한 주기억장치(Main Memory)공간 관리를 한다.
- 다중 프로그래밍 환경에서 프로세스들에 대한 주기억장치 할당 방법을 결정한다.
- 입출력장치 관리 기능
- I/O Scheduling : 어떤 프로세스에게 입출력 자원을 할당할 것인지를 결정한다.
- 입출력 채널이 입출력을 수행하도록 OS가 지시한다.
- CPU는 입출력 제어를 하지만 직접 관여하지 않는다. (idel state가 된다.)
- 파일시스템(정보 자원) 관리 기능
- 파일시스템 사용 여부 및 상태를 추적한다.
- 어떤 프로세스가 파일시스템을 사용할 것인지를 결정한다.
2. 프로세스 관리자 관점의 OS
- 컴퓨터 시스템은 한 개의 OS와 다수 개의 프로세스로 구성된다.
- OS는 한 시점에는 하나의 프로세스가 수행되도록 관리한다. (cpu가 처리할 수 있는 프로세스가 한 개)
- 수행되지 않고 있는 다른 프로세스들은 메모리에 저장되어 대기하고 있다.(부팅 시에 메인 메모리에 OS가 올라가 있는데, 안 올라가면 부팅이 되질 않는다.)
운영체제 |
프로세스1 |
프로세스2 |
프로세스2 |
위의 그림은 메모리에 저장되어 있는 프로세스들인데 프로세스1이 CPU에 할당이 되어서 나머지 프로세스들은 대기중이다.
(다중 프로그래밍 시스템에서의 복수 프로세스)
3. 계층 구조 관점의 운영체제
- OS를 기계(H/W)의 확장으로 본다.
- 내부적 확장기계(*커널)
- Level 1 : 프로세스 관리 하위모듈(동기화 프리미티브, 프로세스 스케줄러)
- Level 2 : 기억장치 관리(메모리 할당/회수)
- Level 3 : 프로세스 관리 상위모듈(메시지, 프로세스 생성 및 제거)
- 외부적 확장기계
- Level 4 : 입출력 장치관리(I/O Traffic Controller)
- Level 5: 정보관리(파일 시스템)
*커널 : OS의 기본 기능을 실행하는 부분
(2) 입출력 프로그래밍
- 컴퓨터 시스템 구성 : CPU, I/O장치, Main Memory, *보조기억장치
- 입출력장치와 같은 기계 장치들은 발전 속도가 상대적으로 느리다.
- 입출력장치에 대한 CPU 및 주기억장치의 긴 대기 문제가 발생한다.
- 대부분의 컴퓨터에서 입출력장치와 CPU는 비동기적(Asynchronous)으로 수행된다.(대기 문제가 발생하기 때문에 프로세스 처리속도 향상을 목적으로 함)
- CPU와 입출력장치에 대한 작동이 서로 독립적이며 수행상의 시간관계 규정이 없이 병행적으로 수행한다.
▶ Buffering (Asynchronous 수행의 한 방법)
- 입출력장치는 기계적인 속도로 수행되어 CPU대비 매우 느린 속도로 작동한다.
- 입출력장치의 느린 속도를 보완하기 위한 기법으로 주기억장치에 입/출력해야 할 데이터를 메인 메모리에 미리 채우는(만들어 두는) 방법이다.
- CPU는 출력할 데이터를 버퍼(메모리)에 채운다.
- 버퍼가 채워지면 CPU는 입출력 채널에 출력을 지시하고, CPU는 자신의 일을 계속 진행한다.(병행 처리)
- 입출력 채널은 버퍼에 있는 데이터를 프린터로 출력을 수행한다.
- 입출력 채널이 출력을 완료하면 CPU에게 완료 정보를 보낸다.
▶ 이중 Buffering (출력속도 향상 목적)
- CPU가 버퍼 A를 채운다.
- 버퍼가 채워지면 CPU는 입출력 채널에게 출력을 지시한다.
- 버퍼 A의 출력과 독립적으로 CPU는 버퍼 B를 채운다.(병행 처리)
- 입출력 채널은 버퍼 A를 출력하고 비운다.
- 입출력 채널이 버퍼 A의 출력을 완료하면 CPU에게 알린다.
- 입출력 채널은 버퍼 B를 출력하고, CPU는 다시 버퍼 A를 채운다.(병행 처리)
▶ Spooling(Simultaneous Peripheral Operation Online)
- 메모리(주기억장치)가 아니라, 디스크를 큰 버퍼로 사용한다.
- 버퍼링과 유사하나 프린터에만 적용하는 것과, 주기억장치가 아닌 하드 디스크에 저장한다는 것에서 차이가 있다.
- 대부분의 프린터 등의 입출력 장치들은 스풀링 기능을 적용하고 있다.
▶ Channel = I/O Channel
- 입출력 장치와 CPU 사이의 입출력 전담 처리기로 모든 입출력은 채널을 통하여 수행된다.
- CPU는 입출력이 실제로 수행 완료될 때까지 기다릴 필요 없이 계속해서 다른 연산을 수행할 수 있다.(CPU와 입출력 채널이 독립적으로 수행)
- CPU가 채널의 현재 상태(현재 사용되고 있는지)를 점검한다.
- 채널의 상태가 양호하면 채널로 하여금 입출력을 수행하도록 한다.
- 채널이 입출력을 완료하면, CPU에게 *인터럽트를 통하여 알린다.
- CPU는 해당 채널의 (입출력)인터럽트를 인지하고 다음 수행을 지시한다.
*Interrupt : 비동기적 수행에서 반드시 필요한 것으로, 컴퓨터 시스템에 예기치 않은 상황 또는 작업의 종료 상황이 발생했을 때 그것을 OS에게 알리기 위한 메커니즘
▶ Interrupt 종류
- I/O Interrupt : 주어진 입출력 동작 완료 or 입출력 오류 발생 시에 CPU에게 알리는 인터럽트이다.
- External Interrupt : 시스템 타이머에서 일정한 시간이 만료된 경우, 사용자가 직접 인터럽트 키를 입력한 경우 등에 발생한다.
- 사용자가 키보드를 누를 때
- SVC(SuperVisor Call) Interrupt : 사용자 프로그램이 수행되는 과정에서 입출력 수행, 기억장치의 할당, 또는 사용자 개입 요구 등을 위하여 실행 중의 프로그램이 SVC 명령을 수행하는 경우에 발생한다.
- admin 권한이 있어야 실행할 수 있을 때
- Machine check Interrupt : 컴퓨터 자체 내의 기계적인 장애나 오류(하드웨어적 문제)로 인한 인터럽트이다.
- Program Error Interrupt : 프로그램 실행 오류로 인한 인터럽트이다.
- 프로그램에서 0으로 나누는 연산이나 보호되어 잇는 기억장소에 대한 접근, 허용되지 않는 명령어 수행, 스택 오버플로우 등과 같은 오류
- Restart Interrupt : 사용자가 콘솔 상의 재시작 키를 누를 때 발생하는 인터럽트이다.
▶ 인터럽트 처리 과정
- 메인 메모리에서 CPU의 프로그램 수행 중에 인터럽트가 발생(프로그램 수행에 필요한 정보를 별도로 저장해 둠 - PSW(Program Status Word))
- 해당 인터럽트 처리 루틴으로 이동(Context Swithching이 일어남)
- 해당 인터럽트 수행 및 완료
- 인터럽트가 발생했던 지점으로 복귀(미리 저장해 두었던 프로그램 수행 정보 이용)
- 원래 수행 중이었던 프로그램을 재수행
▶ BIOS(Basic Input/Ouput System) -> UEFI
- ROM(Read Only Memory)에서 얻어낸 정보
- 부트 프로세스를 실행시키는 명령어들을 포함하고 있다.
- 컴퓨터 칩에 저장된 명령어들을 Firmware(펌웨어)라고 한다.
- 최근 BIOS를 뛰어넘는 통일 확장 펌웨어 인터페이스인 UEFI(Unified Extensible Firmware Interface)가 이용되고 있다.
- POST(Power On Self Test) : CPU, RAM, DVD-ROW 체크 -> 메모리 테스트 -> 부팅파일 로드
'운영체제' 카테고리의 다른 글
[OS] 06. 파일 시스템 (0) | 2023.10.16 |
---|---|
[OS] 05. 디스크 스케줄링 (0) | 2023.10.16 |
[OS] 04. 가상 메모리 관리 (0) | 2023.10.16 |
[OS] 03. 기억장치 관리 (0) | 2023.10.16 |
[OS] 02. 프로세스와 스레드 관리 (0) | 2023.10.16 |