운영체제(Operating System)란?
컴퓨터 응용 소프트웨어와 하드웨어를 안전하게 인터페이스 하기 위해 필요한 서비스의 모음입니다.
운영체제는 컴퓨터의 모든 자원을 효율적으로 관리하는 시스템으로, 하드웨어, 소프트웨어, 데이터 자원에 대한 독점적인 권한을 소유하며, 자원 할당, 공유, 액세스 등을 제어합니다.
- 하드웨어 자원: CPU, 메모리, 키보드, 마우스, 디스플레이, 하드디스크, 프린터 등
- 소프트웨어 자원: 응용 프로그램
- 데이터 자원: 신호, 세마포어, 뮤텍스, 파일, 데이터베이스 등
운영체제는 컴퓨터 시스템 관리자 역할을 하며, 프로그램 관리, 메모리 관리, 파일과 디스크 장치 관리, 입출력 장치 관리, 사용자 계정 관리를 수행합니다.
운영체제는 소프트웨어(software)입니다.
- GUI를 비롯한 도구 프로그램들(예: 탐색기(explorer), 작업 관리자(task manager), 제어판(control panel) 등)
- 커널(kernel)이라고 불리는 핵심 코드(커널은 나중에도 나오겠지만 커널은 시스템의 핵심 부분으로, 하드웨어와 소프트웨어 간의 상호작용을 관리하고, 시스템 자원(메모리, 프로세서 시간, 입출력 장치 등)을 조정합니다)
일반 소프트웨어와 주요한 차이는 그 프로그램의 의도를 볼 수 있습니다.
CPU(processor)에게 다른 시스템 자원의 사용을 지시하며 다른 프로그램의 수행될 시점을 결정되며 이를 위해 운영체제는 CPU를 소유 -> 양도 -> 소유 …의 패턴이 필요합니다.
운영체제(Operating System)의 목적
편리성: 컴퓨터를 보다 편리하게 사용할 수 있게 하기 위함
효율성: 컴퓨터 시스템 자원을 효율적으로 사용할 수 있게 하기 위함
제어 서비스 향상: 새로운 기능을 도입할 수 있도록 하기 위함
운영체제(Operating System)의 역할
운영체제의 역할은 응용프로그램과 하드웨어 간의 인터페이스 역할을 가집니다.
응용프로그램 사용자는 컴퓨터의 구조에는 관심이 없고 컴퓨터를 응용프로그램의 집합으로 바라보며
응용프로그램은 하드웨어 접근이 필요할 때 라이브러리와 운영체제를 활용합니다.
운영체제는 응용프로그램이 하드웨어 자원과 서비스에 쉽게 접근하고 편리하게 사용할 수 있게 해주는 인터페이스로서의 역할을 합니다. 이걸 추상화(abstraction)라고 부르고 있습니다.
운영체제 서비스
- 프로그램 개발 / 수행(API, ABI, ISA)
- 입출력 장치 접근
- 파일 접근 제어
- 시스템 접근
- 에러 발견 및 응답
- 어카운팅(accounting)
API(Application Programming Interface)
정의: 응용 SW 모듈 간의 상호작용을 정의하는 규칙(함수 호출, 데이터 구조, 변수 및 상수 정의)과 명령의 집합
목적: 응용 SW 모듈 간의 통신을 용이하게 하고, 재사용 가능성을 높이며, 코드의 유지보수를 쉽게 하기 위함
작동 방식: 소스 코드 수준에서 작동하며, 개발자는 이를 통해 기능을 호출하거나 데이터를 주고 받음
종류: 웹 API, 표준 라이브러리 API, 시스템 호출 API
예시: RESTful API, Windows API, Java API 등
ABI(Application Binary Interface)
정의: 응용 SW와 OS 간의 바이너리 수주에서 인터페이스를 정의하는 표준입니다.
목적: 컴파일된 바이너리 코드가 서로 다른 시스템 환경(OS, CPU 구조)에서도 일관되게 작동할 수 있도록 함. 프로그램 실행 중에 정확한 함수 호출, 데이터 형식, 메모리 레이아웃 등을 보장합니다.
작동 방식: 바이너리 수준에서 작동하며, 컴파일된 프로그램들이 시스템의 런타임 환경과 상호작용할 수 있도록 합니다.
예시: ELF, PE 포맷, C++ ABI
ISA(Instruction Set Architecture)
정의: SW와 CPU 간의 인터페이스로서, 기계 명령어 집합을 규정함
목적: 실행 중인 응용 SW가 직접 하드웨어를 접근하지 못하게 하기 위함
작동 방식: 기계 명령어 집합을 User-ISA와 System-ISA로 구분하여, 응용SW는 User-ISA로 번역, OS는 System-ISA로 번역하여 하드웨어를 접근하도록 함
역할: 이식성(portability)을 지원하고 성능을 최적화할 수 있도록 CPU 설계
종류: User-ISA, System-ISA
예시: x86, ARM, MIPS, RISC-V
자원 관리자로서의 운영체제
하드웨어는 데이터의 이동/저장/처리와, 이들기능을 제어하는데 필요한 자원들의 집합 입니다.
OS는 CPU에 의해 수행되는 일련의 프로그램이며, 자주 사용되는 부분들은 주기억장치 에 상주합니다.
OS는 응용 프로그램들을 위해 주기억장치를 할당함 OS는 수행 중인 응용 프로그램의 입출력 장치, 파일에 대한 접근을 제어합니다.
OS는 특정 응용 프로그램의 수행을 위해 CPU 시간을 할당합니다.
운영체제 발전의 용이성
OS가 계속적으로 발전하는 이유
- 하드웨어 업그레이드와 새로운 형태의 하드웨어 출현
- 새로운 서비스 요구
- 버그 수정
OS는 이러한 요구에 쉽게 적응할 수 있도록 설계되어야 함
- 운영체제 구성이 모듈화되어야 하고
- 모듈 간에 명확하게 인터페이스가 정의되고
- 문서화가 잘 되어야 함
운영체제 기능 및 응용소프트웨어와의 차이
운영체제 유형
1) 순차 처리
사용자가 컴퓨터를 순차적으로 접근하여 자신의 작업을 처리하는 방식입니다.
순차 처리의 두 가지 문제점이 있습니다.
스케줄링(scheduling)
1. 컴퓨터 사용 예약시간보다 일찍 종료한다면 컴퓨터 처리 시간이 낭비됩니다.
2. 할당된 시간 내에 작업이 완료되지 못하면 작업을 종료할 수 밖에 없는 문제가 발생합니다.
준비시간(setup time)
1. 단일 프로그램 수행을 위한 컴파일러, 소스 코드를 주기억장치에 적재, 바이너리 실행파일을 저장장치에 저장한 다음, 공용 함수들을 함께 적재하여 링크해야 함
2. 이들 각 단계마다 테이프 장치의 장착과 탈착, 카드 덱의 준비 등이 필요
3. 이 과정에서 에러가 발생하면 위의 절차를 처음부터 다시 반복해야 함
4. 따라서 프로그램 수행 분비에만 상당한 시간이 걸림
2) 배치 운영체제
여러 개의 작업(batch)을 입력장치에 모아 순서대로 하나씩 처리하는 방식
사용자 프로그램과 운영체제가 번갈아 수행합니다.
작업 처리 순서는 자동으로 모든 작업이 순차적으로 수행됩니다. 여기에도 두 가지의 문제점이 있습니다.
하나의 프로그램이 실행되는 과정
CPU 작업 – I/O 작업 - CPU 작업 – I/O 작업 - … - 종료
속도가 느린 I/O 장치가 I/O 작업을 끝낼 때까지 CPU 낭비를 초래함
CPU 활용률 저하됩니다.
배치 처리 방식 도입으로 인한 이슈
운영체제 보호 필요, 작업 제어 및 입출력 지원을 위한 특권 명령어 필요합니다.
3) 멀티프로그래밍 운영체제
여러 프로그램을 메모리에 올려놓고 동시에 처리하는 방식입니다.
주요 목적은 CPU 활용률을 최대화 하기 위함에 있습니다.
멀티프로그래밍 도입으로 인한 이슈
큰 메모리 이슈: 여러 프로그램을 동시에 메모리에 올려놓기 위해서는 큰 메모리의 필요
메모리 할당 및 관리 이슈: 몇 개의 프로그램 적재? 메모리 어디에 적재? 프로그램 당 할당하는 메모리 크기?
메모리 보호 이슈: 프로그램이 다른 프로그램의 영역을 침범하지 못하게 막는 방법 필요
CPU 스케줄링과 컨텍스트 스위칭: 수행시킬 프로그램 선택하는 스케줄링 필요, 프로그램의 수행 상태를 저장할 컨텍스트(context) 정의, 컨텍스트 스위칭 필요
인터럽트 개념 도입: 운영체제가 I/O 장치로부터 입출력 완료를 전달받는 방법 필요
동기화: 여러 프로그램이 동일한 자원을 동시에 액세스할 때 발생하는 문제 해결
교착상태 해결: 프로세스들이 상대가 가진 자원을 서로 요청하면서 무한대기하는 교착상태 해결
4) 시분할 멀티프로그래밍 운영체제
각 사용자 프로그램이 짧은 시간 동안 번갈아 수행되도록 해주는 방식
대화형(interactive) 멀티프로그래밍이라고 합니다.
주요 목적은 응답시간을 최소화 하기 위함에 있습니다.
5) 다중처리 운영체제
하나의 프로그램 또는 다수의 프로그램들을 다수의 CPU에서 처리하는 방식입니다.
멀티CPU 또는 멀티코어를 장착한 SMP(Symmetric Multi-Processor) 구조입니다.
다중처리(multiprocessing) 도입으로 인한 이슈
멀티프로그래밍 도입으로 인한 모든 이슈 포함
운영체제 코드들은 재진입(reentrance) 가능해야 함
일관된 스케줄링 정책 유지하여야 함
효과적인 동기화 기법을 제공해야 함
하드웨어 병렬성을 활용하는 메모리 관리 기법을 제공하여야 함
하나의 응용프로그램을 병렬 프로그래밍할 수 있는 기법을 제공하여야 함
6) 단일체(monolithic) 커널 구조
모든 커널 기능이 단일 주소공간에서 하나의 커다란 코드 블록으로 합쳐져서 수행
커널의 모든 기능 요소는 커널 내부의 모든 자료구조와 루틴을 접근할 수 있음
일부의 기능이 바뀌면 모든 커널 모듈은 새로 링크되고 설치되어야 함
새로운 장치를 추가하는 등의 변경이 어려움
UNIX, Linux 등
'컴퓨터 과학 > 운영체제' 카테고리의 다른 글
[운영체제] 스레드 동기화, 상호배체, 임계구역 (0) | 2024.12.15 |
---|---|
[운영체제] 프로세스 개요 (1) | 2024.10.04 |
[운영체제] 컴퓨터 하드웨어 (2) | 2024.09.26 |
[운영체제] CPU(중앙처리장치)의 여러 구성 요소 (1) | 2024.09.11 |