운영체제란?
컴퓨터 하드웨어 바로 위에 설치 -> 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층
<운영체제>
: 컴퓨터가 꺼질 때까지 실행
* 컴퓨터 booting -> 운영체제가 메모리에 올라가 실행 시작
* 컴퓨터 종료 -> 운영체제 실행 종료
- 커널: 운영체제의 핵심 부분
- I/O controller: 각 I/O device들을 전담하는 controller
ex. CPU가 하드디스크로부터 파일을 불러오고 싶음 -> I/O controller가 가져다 줌 -> 하드디스크가 자신의 메모리에 내용 저장
운영체제의 목적
1. 컴퓨터 시스템을 편리하게 사용할 수 있는 환경 제공(하드웨어 관리 + 편리한 인터페이스 제공)
- 운영체제는 동시 사용자/프로그램들이 각각 독자적 컴퓨터에서 수행되는 것 같은 환상 제공
* 나 혼자 physical machine(server)를 사용하는 느낌이 들도록
- 하드웨어를 직접 다루는 복잡한 부분을 다룸
2. 컴퓨터 시스템의 한정된 자원을 공평하고 효율적으로 관리해 최대한으로 성능 뽑아내기
- CPU, 메모리, I/O 장치 등을 관리(사용자에게 번갈아 나누어줌)
: (효율성) 주어진 자원으로 최대한의 성능 내도록 -> 주 목적
: (형평성) 특정 사용자/프로그램의 지나친 불이익이 발생하지 않도록
- 사용자 및 운영체제 자신의 보호
컴퓨터 시스템의 구조 & 운영체제의 기능
운영체제는 다음 4가지 기능을 가진다.
메모리 관리
: CPU의 작업 공간
: 컴퓨터 켜지면 운영체제가 올라가 CPU 관리
: 나머지 공간은 프로세스들이 차지해 사용
<메모리 관리>
"한정된 메모리를 어떻게 쪼개어 쓰지?"
CPU 스케줄링
: 매 clock 마다 메모리의 기계어 읽어다가 연산하는 하드웨어
ex. 메모리의 운영체제에 들어 있는 기계어 중 "프로그램 c에게 CPU 할당" 읽어들여 실행 -> 프로그램 c에게 CPU 할당
<CPU 스케줄링>
"어떤 프로그램에게 CPU 사용권을 줄까? 그 프로그램에게 얼마나 오래 할당할 것인가?"
디스크 스케줄링
"disk controller"
: disk에 요청이 들어오면, disk가 바로 주지 않고 disk controller라는 비서가 정보 제공 스케줄 담당(디스크 스케줄링)
<디스크 스케줄링>
"디스크에 들어온 요청을 어떤 순서로 처리할까?"
: 순서대로 처리X, 가장 효율적으로 처리O
=> 엘리베이터와 같은 원리로 처리(가는 김에 태워서 가기 등 ..)
인터럽트, 캐싱
"빠른 CPU와 느린 I/O 장치 간 속도 차이를 어떻게 극복하지?"
* 속도: 디스크 < 메모리 < CPU
<인터럽트>
I/O controller에게 작업을 부탁한 후 당장 CPU 자신이 할 수 있는 일 수행
-> I/O controller가 작업을 끝내면 CPU를 인터럽트함
-> CPU는 자동으로 운영체제에게 넘어감
* CPU는 기계어 하나 실행 끝나면 인터럽트 확인
<캐싱>
메모리와 디스크 간 속도 차이
-> 자주 사용하는 것이라면 메모리 어딘가에 보관해뒀다가 나중에 사용
-> 디스크까지 가는 시간을 절약할 수 있음
프로세스의 상태
CPU는 자신의 규칙에 맞게 각 프로세스에게 할당하는데,
한 프로세스가 너무 많이 사용하지 않도록 큐의 마지막에 다시 줄세우거나 함
<사람과 인터렉션하는 프로세스>-I/O device
CPU가 I/o controller에게 부탁
-> CPU는 자신이 할 일 하고 있음
-> I/O controller가 자신의 규칙에 맞게 큐에 있는 프로세스 처리
-> I/O controller가 일을 완료하면 인터럽트
-> CPU가 운영체제에게 넘어감
-> 운영체제가 완료된 일을 디스크 입출력 큐에서 빼와 CPU 큐에 넣어줌
<과학적 프로세스>
CPU 가 많이 필요하기 때문에 한 번에 많은 CPU 할당해서 계속 사용하고 있음
운영체제의 종류
동시 작업 가능 여부에 따라
- 단일 작업(single tasking)
: 한 번에 하나의 작업만 처리
- 다중 작업(multi tasking)
: 동시에 두 개 이상의 작업 처리
ex. UNIX, MS Windows 등에서는 한 명령의 수행이 끝나기 전에 다른 명령이나 프로그램 수행 가능
=> 다중작업용 운영체제가 되면서 많은 문제가 생기는 것 !
사용자 수에 따라
- 단일 사용자
: 혼자만 사용할 수 있는 운영체제
ex. MS-DOS, MS Windows
- 다중 사용자
: 여러 사용자가 동시에 사용할 수 있는 운영체제
-> 사용자 간 서로 보지 못할 때 지켜주기 위해 보안 기능 등 추가
ex. UNIX, NT server
처리 방식에 따라
- 일괄처리
: 작업요청의 일정량 모아서 한꺼번에 처리
: 작업이 완전히 종료될 때까지 기다려야 함
ex. 초기 punch card 처리 시스템
=> 현재는 잘 쓰지 않음
- 시분할(time sharing)
: 응답시간이 짧다.
ex. UNIX(LINUX)
: A도, B도 바로 응답하는 것처럼 보이기 때문에 interactive한 방식으로 볼 수 있다.
(워드와 크롬을 둘 다 켰을 때 둘이 동시에 작동하는 것처럼 보이지만, 사실 아니다..)
- 실시간(Realtime OS)
: 정해진 시간 안에 어떠한 일이 반드시 종료됨이 보장되어야 하는 실시간 시스템을 위한 OS
ex. 원자로 공장 제어, 미사일 제어, 반도체 장비, 로보트 제어 등등...
(예컨대,, 미사일이 잘못 발사됐을 때 미사일의 각도를 트는 것이 정해진 시간 안에 반드시 수행되어야 한다.)
1. Hard realtime system(OS): 경성 실시간 시스템
미사일처럼 지금 당장 되지 않으면 안 되는 일 담당
2. Soft realtime system(OS): 연성 실시간 시스템
TV처럼 당장 되지 않아도 안전에는 지장이 없는 비교적 유연한 일 담당
=> 현대의 범용 운영체제는 다중작업, 다중사용자, 시분할을 사용한다.
몇 가지 용어
- Multitasking
: 사용자 입장에서 여러 작업을 동시에 수행할 수 있는지에 대한 개념
- Multiprogramming
: 컴퓨터 관점에서 프로그램을 여러 개 돌릴 수 있는지에 대한 개념
한글, 크롬 등은 각각 여러 개의 프로세스로 구성되어 있다.
- Time sharing
: CPU가 시간을 나누어 작업할 수 있는지에 대한 개념
ex. A 프로그램 1초 -> B 프로그램 2초 -> A ..
- Multiprocess
=> 모두 하나의 컴퓨터 안에서 하나의 CPU로 여러 작업을 동시에 수행한다는 개념을 가지고 있음(<->multiprocessor)
<Multiprogramming vs Multiprocess>
multiprogramming 관점에서는 3개의 프로세스를, multiprocess의 관점에서는 9개의 프로세스를 실행하고 있는 것이다.
프로세스 = CPU
프로세서 = CPU가 여러 개 박혀있음
* multiprocessor: 하나의 컴퓨터에 CPU 칩이 여러 개
* multicore: Cpu 칩은 하나이지만, 그 안에 조그마한 프로세서가 여러 개 내장되어 있음
운영체제의 예
소프트웨어는 사용자의 컴퓨터에 설치되면 그냥 그것만 쓸 수밖에 없게 되기 때문에 독점 체제가 가능
-> 다양한 세컨드 소프트웨어 회사들이 소스코드 무료 공개 "에라잇 모르겠다 이미 뺏겼다~"
<UNIX(=LINUX)>
- 코드의 대부분을 C언어로 작성
: INTEL, ARM, MIPS 등 여러 가지의 CPU 종류는 각각의 ISA 가지고 있음
- 높은 이식성
: 어디든 옮겨갈 수 있음
- 최소한의 커널 구조
: 사용자가 재량대로 확장할 수 있음
- 복잡한 시스템에 맞게 확장 용이
- 소스코드 공개
: 누구든 커널에 접근 가능
- 다양한 버전
: UNIX 종류에는 System V, FreeBSD, SUNOS 등 있었지만 LINUX만 살아남음
LINUX는 UNIX를 계승
공유하지 않기 위해 MS-DOS 탄생 -> Windows3.1 -> Windows9.8 -> ...
<MS>
DOS(Disk Operating System)
- MS사에서 1981년 IBM-PC를 위해 개발
- 단일 사용자용 운영체제, 메모리 관리 능력의 한계(주기억장치: 640KB)
MS Windows
- MS사의 다중 작업용 GUI 기반 운영체제
- Plug and Play, 네트워크 환경 강화
- DOS용 응용프로그램과 호환성 제공
- 불안정성 <-> LINUX 안정적
ex. 맥북, 아이폰 모두 LINUX 사용하기 때문에 그냥 꺼도 다음에 켜서 쓸 수 있음
- 풍부한 지원 소프트웨어
운영체제 구조
- CPU 스케줄링: 누구에게 CPU를 줄까
- 메모리 관리: 한정된 메모리를 어떻게 쪼개어 쓸까
- 파일 관리: 디스크에 파일을 어떻게 보관할까
- 입출력 관리: 각기 다른 입출력장치와 컴퓨터 간에 어떻게 정보를 주고받게 할까
- 프로세스 관리: 프로세스의 생성/삭제, ,
'학교 강의 > 운영체제' 카테고리의 다른 글
[Chapter 4] Process Management (0) | 2025.04.19 |
---|---|
[Chapter 3] Process (0) | 2025.04.19 |
[Chapter 2] System Structure & Program Execution (0) | 2025.04.18 |
[Chapter 5] CPU scheduling (0) | 2025.04.07 |