운영체제
운영체제
ㅡ> 하드웨어 바로 윗단에 설치되는 소프트웨어
ㅡ> 하드웨어와 소프트웨어, 사용자를 연결해주는 계층
ㅡ> 좁은 의미 : 커널 (메모리에 상주) (전공자 입장에서 os는 주로 이것)
ㅡ> 넓은 의미 : 커널뿐 아니라 주변 시스템 유틸리티 포함 (메모리에 상주하지 않는 별도의 프로그램들)
ㅡ>ㅡ> ex) 파일을 복사하는 프로그램
소프트웨어나 사용자가 하드웨어에 직접 접근하는게 아니라
os를 통해 접근하게 됨
커널
ㅡ> 운영체제의 핵심적인 부분
ㅡ> 프로세스 관리, 메모리 관리, 디바이스 드라이버 관리 등 핵심 자원 관리
운영체제의 목표
<운영체제의 목표>
1. os 윗단과의 관계 : 사용자가 컴퓨터를 편리하게 사용하게 해줌
2. os 아랫단과의 관계 : 하드웨워 자원을 효율적으로 관리
1. 사용자가 편리하게
ㅡ> os는 동시 사용자/프로그램들이 각각 독자적 컴퓨터에서 수행되는 것 같은 환상을 제공
ㅡ> 하드웨어를 다루는 복잡한 부분을 os가 대행
실제 컴퓨터(physical machine)은 한대인데
각각 프로그램이 독자적 컴퓨터(abstract machine)에서 수행되는 것 처럼 보임
2. 하드웨어를 효율적으로 관리
1. 주어진 자원을 가지고 최대의 효율을 가지는 것 (효율성)
2. 특정 사용자가 너무 차별받지 않도록 관리 (형평성)
하드웨어 자원
ㅡ> CPU, 메모리, I/O장치 등
소프트웨어 자원
ㅡ> 프로세스, 파일, 메시지
ㅡ> 하드웨어 뿐만 아니라 소프트웨어 자원도 os가 관리
cpu와 메모리 할당 방법에 대해
여러가지 알고리즘, 정책이 있다
대통령이 국가를 통치하는 것과 비슷하다
어떤 부서에 예산을 얼마나 할당해 줄 것인가
1/n로 할당하는 것보다, 국가의 상황과 경쟁력을 파악해서
할당하는게 더 효율적일 수 있다
너무 효율만 추구해서 발생하는 극빈층(자원할당을 못받는 프로그램)은
어떻게 할 것인가도 판단
운영체제의 분류
1. 동시 작업 가능 여부
2. 사용자의 수
3. 처리 방식
1. 동시 작업 가능 여부
단일 작업은 옛날 os
현대의 os는 거의 다 다중 작업을 지원
(특수목적으로 단일작업os도 존재하긴 함)
2. 사용자의 수
한 컴퓨터에 여러명이 접속할 수 있는지
3. 처리 방식
일괄처리
옛날에 사용하던 방식
요즘엔 찾아보기 힘듬
예전엔 컴퓨팅 자원이 한정적이어서, 한번 자원을 할당받는데 시간이나 비용이 크기 때문에
하나를 처리하려고 자원을 할당받는게 비효율적이었음
그래서 쌓아놨다가 한번에 일괄처리
시분할 (time sharing)
범용성
ㅡ> 우리들이 사용하는 컴퓨터의 방식이 시분할 방식이라고 생각하면 된다
시분할
ㅡ> 각 사용자에게 차례대로 정해진 시간만큼 컴퓨터 자원을 사용하게 한다
ㅡ> 각 사용자에 1초씩 분할해주면 끊기는 느낌을 받겠지만, 아주 짧은시간씩 분할해주면, 인간은 끊기는걸 체감 못한다
실시간
특수목적
ㅡ> 미사일제어나 반도체공장처럼 아주 정밀해야되는 시스템에 사용
데드라인
ㅡ> Hard realtime system : 반드시 데드라인 지켜야 됨 (ex 미사일제어, 반도체공장)
ㅡ> Soft realtime system : 데드라인은 존재하나, 어기는게 치명적이진 않음 (ex. 영화 스트리밍)
혼돈하기 쉬운 용어
멀티태스킹
ㅡ> 동시에 여러작업 지원
멀티프로그래밍
ㅡ> 동시에 여러 프로그램이 메모리에 올라감
시분할 (time sharing)
ㅡ> CPU의 시간을 분할함을 강조
멀티프로세스
ㅡ> 동시에 여러 프로세스가 동시에 실행
멀티프로세서
ㅡ> 하나의 컴퓨터에 여러 CPU
운영체제의 예
초창기 유닉스 계열 ㅡ> 대형 컴퓨터를 위해 만듬
윈도우 계열 ㅡ> 개인PC를 위해 만듬
ㅡ> 기계어로 OS짜는게 힘들어서 C언어를 만듬
ㅡ> 기계어로 짜면 기계마다 다르게 짜야되는데, C언어라서 컴파일하면 되니까 이식성이 좋음(portable)
ㅡ> 소스코드 공개함
ㅡ> 커널을 작게 만들어서 메모리 적게 차지
ㅡ> 다른 Unix 계열은 이제 소스코드 공개안하기도 하는데, Linux는 소스코드 공개
ㅡ> Unix는 대형 컴퓨터(서버)를 위해 만들었지만.. Linux는 개인pc에 쓰기도 좋음
ㅡ> 단일 사용자용으로 만듬
ㅡ> 미래에도 640KB이상의 메모리는 필요 없을 것이다라는 주장
ㅡ> 초기버전은 불안정했지만 요즘엔 괜찮음
운영체제의 구조
CPU
ㅡ> CPU 스케줄링
ㅡ> 어떤 프로그램한테 CPU자원을 할당할까
ㅡ> 인간사회에선 주로 선입선출이지만, 컴퓨터는 하드웨어마다 시간차이가 커서 그렇게하면 굉장한 비효율이 발생
Memory
ㅡ> 메모리 관리
ㅡ> 어떤 프로그램한테 메모리자원을 할당할까
ㅡ> 메모리가 부족하면 CPU에서 다시 사용할 가능성이 높은 것을 두고 나머진 쳐냄
Disk
ㅡ> 파일 관리
ㅡ> 디스크에 파일을 어떻게 보관할까
ㅡ> 디스크 헤더가 움직이면서 데이터를 읽어야돼서 메모리와는 다른 특성
ㅡ> 디스크 스케줄링 : 디스크에 읽거나 쓰라는 요청이 왔을 때, 헤더에 가까운 요청을 먼저 처리해주는게 좋음
ㅡ> 엘리베이터 스케줄링과 유사. 먼저 입력이 들어온 순서대로 1층갔다 100층갔다 2층갔다 99층갔다 하는것보다, 1층2층 먼저처리하고 99층 100층 처리하는게 나음
I/O device
ㅡ> 입출력 관리
ㅡ> 굉장히 느려서, CPU와 어떻게 교신할까를 생각해야됨 (인터럽트)
수강태도
OS 사용자보단 개발자의 관점
내가 OS라면 어떻게 해야될까의 관점
'CS > 운영체제' 카테고리의 다른 글
[반효경os] CPU Scheduling (1) | 2024.12.10 |
---|---|
[반효경os] Process Management (0) | 2024.12.09 |
Process (0) | 2024.11.25 |
[반os] 시스템구조 & 프로그램 실행 (1) | 2024.11.06 |
[반os] 운영체제 - 강의소개 (3) | 2024.08.21 |