운영체제
컴퓨터 하드웨어(CPU, 입출력장치 etc) 등의 리소스를 관리해주면서 동시에 여러 애플리케이션이 작동할 수 있는 환경을 제공해주는 소프트웨어입니다.
운영체제 역할
- 프로그램들이 자원을 필요로 할 때 자원을 할당해줍니다.
- 각각 자원을 할당받은 프로그램들이 서로의 영역을 침범하지 않게 하고, 컴퓨터의 부적절한 사용을 방지하는 제어프로그램의 역할을 합니다.
운영체제 원리
컴퓨터가 부팅될 때 Bootstrap이라는 프로그램이 먼저 실행됩니다. 이 프로그램은 시스템의 모든 부분을 초기화합니다. 그리고 운영체제를 메모리에 올려 실행될 수 있도록 하고 실행 된 후 다음 이벤트를 기다리게 됩니다. 이러한 이벤트를 시스템에서는 Interrupt라고 부릅니다.
인터럽트
인터럽트는 컴퓨터가 부팅이 되고 운영체제가 실행된 후 사용자의 입력 이벤트를 기다리게 되는데 여기서 이벤트를 인터럽트라고 합니다. 인터럽트는 내부 인터럽트와 외부 인터럽트로 나눌 수 있습니다. 내부 인터럽트는 하드웨어 고장, 실행할 수 없는 명령어, 명령어 실행 오류, 사용 권한 위배 등이 있고 외부 인터럽트는 입출력장치에 의해 발생합니다. 타이머 인터럽트와 입출력 인터럽트가 있습니다.
인터럽트가 발생하게 되면 운영체제는 해당 명령어의 주소를 저장합니다. 주소를 저장하는 이유는 인터럽트의 대응하는 행위를 마무리하고 다시 그 다음 명령어를 수행하거나 대기 상태로 돌아오기 위함입니다.
운영체제는 Interrupt Vector Table 이라는 곳에서 해당 인터럽트에 대한 번호를 찾고 그 번호에 대응하는 행위 Interrupt Vector Routine을 실행시킵니다. IVR(Interrupt Vector Routine)이 끝나고 나면 운영체제는 저장해 놓았던 주소로 돌아가서 인터럽트를 대기하게 됩니다.
인터럽트 종류
- H/W Interrupts
CPU 외부의 디스크 컨트롤러나 주변장치로부터 요구되는 것으로 운영체제의 처리를 요하는 상황을 알리기 위해 사용됩니다. - S/W Interrupts
Trap 이나 Exception 이라고도 합니다. S/W에서 발생하는 오류를 말합니다.
운영체제 서비스에 대한 요청 (System Call)
운영체제 구조
- Multiprogramming (멀티프로그래밍)
여러 작업들이 동시에 메모리에 올라가게 됩니다. 그리고 작업이 수행되는 동안 CPU가 대기 상태로 들어가고 I/O작업을 수행을 할 때 다른 작업은 대기 상태인 CPU를 사용하게 함으로써 유연성을 제공하고 효율성을 높이는 방법입니다. 반대로 I/O가 대기 상태 일때는 I/O가 필요한 작업에게 그 자원을 할당해줍니다.
- Multitasking (멀티태스킹)
Multiprogramming의 단점인 작업들마다 자원의 사용에 시간 차이가 생기는 문제를 해결하기위한 방법입니다. Multitasking은 각각의 작업에 시간을 부여하고 CPU를 작업하다가 부여한 시간이 지나면 다른 작업에게 CPU 자원을 할당해줍니다. 이렇게 함으로써 작업들마다 시간 지연으로 인한 낭비를 줄일 수 있습니다. 위에서 부여한 시간은 짧고 작업간 많은 Switching이 발생하게 됩니다.
운영체제의 효율성과 컴퓨터 동작 저해행위 보호 수단
- Dual-Mode-Execution
Mode-bit을 사용하여 Kernel Mode 와 User Mode를 나타냅니다.
프로그램이 메모리에 올라가서 작업들을 수행할 때 명령어들을 하나씩 읽어와서 수행하게 됩니다. 하지만 사용자가 Kernel 작업에 직접 명령하게 되면 시스템 전체의 큰 문제를 불러올 수 있습니다. 이를 예방하기 위해 Dual-Mode_Execution을 사용하게 되었습니다.
Dual-Mode-Execution은 명령어의 Mode-bit를 비교하여 같을 때에만 해당 명령어를 수행하게 합니다. 예를 들어 입출력 작업은 운영체제만 접근이 가능해야합니다. User-Mode로 명령어를 입력하면 운영체제가 Kernel-Mode로 Mode를 변경한 후 입출력장치에 명령을 내리게 됩니다. 그리고 명령을 처리한 후에는 다시 User-Mode로 돌아오게 됩니다.
여기서 Mode를 바꾸는 행동을 System-Call이라고 부릅니다.
- Timer
무한루프나 자원의 독점을 막는 역할을 합니다. 자원을 사용할 때 특정시간이 지나면 인터럽트를 발생시키고 운영체제는 그 시간을 감소시키면서 인터럽트를 기다리게 됩니다. 운영체제는 Timer가 끝난 작업을 종료시키고 실행되기 전 Scheduling 작업 전에 Timer를 작동시킵니다.
운영체제 하는 일
- Process Management
▷ 프로세스와 쓰레드의 CPU 위의 작업들을 Scheduling 합니다.
▷ 사용자와 시스템의 프로세스를 생성하거나 삭제합니다.
▷ 프로세스의 동기화 작업이나 커뮤니케이션 작업의 메커니즘을 제공합니다. - Memory Management
▷ 명령어들이 순서에 맞게 실행되도록 관리합니다.
▷ 모든 데이터들이 실행되기 전에 메모리에 올라갈 수 있도록 관리합니다.
▷ 메모리 공간을 할당하고 회수합니다.
▷ 언제 어떤 프로세스가 메모리에 올라갈지 결정합니다. - Storage Management
- Protection and Security
운영체제가 제공하는 서비스
- 사용자 관점
▷ UI 제공 - CLI, GUI를 제공합니다.
▷ I/O 작업 수행 - 프로세스는 모니터나 파일을 통해 입출력을 시스템에게 요구할 수 있습니다. 일반적으로는 사용자들이 입출력장치를 제어할 수 없기 때문에 (위에서 배웠던 내용 : Dual-Mode-Execution) 운영체제가 입출력에 대한 제어를 제공합니다.
▷ 오류 감지 - 시스템에는 예측할 수 없는 오류가 언제나 발생합니다. 운영체제는 이러한 사태를 대비해 언제나 각 타입에 오류에 대해 적당한 조치를 취합니다.
▷ 파일 시스템 관리 - 프로그램은 파일을 읽거나 쓸 수 있으며, 이름으로 생성, 삭제, 검색 할 수 있어야 합니다. - 시스템 관점
▷ 자원 할당 - 다수의 사용자, 다수의 작업이 실행될 때 운영체제는 각 요소에 대한 효율적으로 자원을 할당할 수 있어야 합니다.
▷ 회계(Accounting) - 특정 사용자, 특정 작업이 시스템의 자원을 얼마나 사용하는지 확인할 수 있어야 합니다.
▷ 보호와 보안 - 기본적으로 서로 다른 프로세스간의 간섭을 허용해서는 안되며, 외부에서의 불법적이거나 위협적인 접근을 차단/제어할 필요가 있습니다.
프로그램과 프로세스
먼저 프로그램은 현재 메모리에 올라와 있는 프로세스들 중 실행 중인 프로세스를 말하고,
프로세스는 CPU time, Memory, files, I/O등 여러 자원을 필요로 합니다.
결론
운영체제에 대한 개념적인 부분을 정리하는 시간이었습니다.
운영체제가 하는일에 대해서 알 수 있었고 어떻게 작동하는지도 알 수 있었습니다.
또한 인터럽트에 대한 개념에 대해서도 정리할 수 있었습니다.
[참고]
1. 운영체제 구조와 원리 - brian_kim.log
'Backend > OS' 카테고리의 다른 글
[OS] Process Management (3) _ 쓰레드, 쓰레드 동기화, 세마포어 (0) | 2022.07.31 |
---|---|
[OS] Process Management (2) _ CPU 스케줄링 (0) | 2022.07.27 |
[OS] Process Management (1) _ 프로세스, 멀티프로그래밍 (0) | 2022.07.26 |
[OS] Terminal Usage (2) _ Terminal 명령어 (0) | 2022.07.19 |
[OS] Terminal Usage (1) _ CLI, Terminal, Shell (0) | 2022.07.19 |