Search
💾

[OS] Introduction to Operating Systems2

참고 강의
운영 체제의 분류
동시 작업 가능 여부
단일 작업(single tasking) → 과거의 운영체제
한 번에 하나의 작업만 처리
ex. MS-DOS, 기능이 하나밖에 없고 그 기능에 충실한 특수 목적 기계를 위한 운영체제
  다중 작업(multi tasking) → 현대의 운영체제
동시에 두 개 이상의 작업 처리
ex. UNIX, MS Windows 등
사용자의 수
컴퓨터 한 대를 여러 사용자가 동시에 접속해서 쓸 수 있는지로 분류
단일 사용자(single user)
ex. MS-DOS, MS Windows
  다중 사용자(multi user)
각 사용자에 대한 파일, 메모리 접근을 다른 사용자가 못 보게 보안 기능 + 사용자 간의 형평성 관리 필요
ex. UNIX, NT server
처리 방식
일괄 처리(batch processing)
작업 요청의 일정량 모아서 한꺼번에 처리
작업이 완전 종료될 때까지 기다려야 함(중간에 사용자의 개입이 허용되지 않음)
interactive 하지 않음
  시분할(time sharing) → 현대의 운영체제
여러 작업을 수행할 때 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용
일괄 처리 시스템에 비해 짧은 응답 시간을 가짐
작은 시간 단위로 나누어서 번갈아가면서 CPU 할당
각각의 사용자는 interactive한 서비스를 받기 가능
  사람이 느끼기에 빠르게 해주면서 동시에 주어진 자원을 최대한 활용하는 것이 목적(정확한 시간을 지키는 것이 목적이 아님 → 사람 특화 시스템)
효과적으로 운영하기 위해선 다중 프로그래밍 시스템이 먼저 필요
다중 프로그래밍 시스템이 필요한 이유
ex. 일반 범용 컴퓨터(Linux, Windows, iOS, Android)
실시간(Realtime OS)
정해진 시간 안에 어떠한 일이 반드시 종료됨이 보장되어야 하는 실시간 시스템을 위한 OS
스마트폰같은 장비에서 실시간성을 필요로 하는 응용 프로그램들이 늘어나면서 OS에서 해당 애플리케이션을 어떻게 지원해줘야 할 지 중요한 이슈가 되고 있음 → 실시간성을 지켜주도록 범용 운영체제가 어떻게 하면 되겠는가
Hard realtime system(경성 실시간 시스템)
Soft realtime system(연성 실시간 시스템)
몇 가지 용어 정리
Multitasking : 하나의 프로그램이 끝나기 전에 다른 프로그램이 실행 가능한 것 (= Multiprogramming)
Multiprogramming : 메모리에 여러 프로그램이 동시에 올라가는 방식, 특히 메모리 측면을 강조
Time Sharing : CPU의 시간을 분할하여 나누어 쓴다는 의미, 특히 CPU쪽을 강조
Multiprocess : 여러 프로세스(실행중인 프로그램)가 동시에 실행되는 방식
  컴퓨터에서 여러 작업을 동시에 수행하는 것을 의미
  CPU가 하나 있더라도 시간을 조금씩 나누어서 동시에 실행이 가능한 시스템
  Multiprocessor(다중처리기) : 하나의 컴퓨터에 CPU가 여러 개 붙어 있음을 의미
Processor == CPU == 처리기
여러 프로그램이 CPU에 동시에 들어가는 것이 가능(병렬적으로 프로그램을 다룸)
하드웨어적으로 위의 용어들과 다른 프로그램
운영 체제의 예
유닉스(UNIX)
대형 컴퓨터를 위해서 만들어진 운영체제
멀티 태스킹 가능
높은 이식성
하나의 컴퓨터에서 돌아가는 UNIX를 전혀 다른 컴퓨터에 이식하기 쉬움
최소한의 커널 구조
너무 많은 기능을 커널에다가 집어 넣으면 운영체제가 차지하는 메모리가 증가
핵심 기능만 커널에 집어넣음
UNIX를 위해서 언어를 만들어서 사용
C언어(기계, 사람에게 모두 가까운 언어)
소스 코드 공개
누구나 가져다 쓰기 좋음, 운영체제 공부하기 좋음
프로그램 개발에 용이
일반인에게는 어려움
ex. System V, FreeBSD, SunOS, Solaris, Linux
Linux
DOS(Disk Operating System)
PC 용량이 작고, 단일 프로그램만 지원 → 단일 작업용 운영체제
640KB까지만 지원해줌
MS Windows
PC를 위해서 만들어진 운영체제
단일 사용자, 단일 작업을 위한 운영체제로 시작 → DOS
다중 작업용 GUI 기반 운영 체제
불안정성(초창기 MS Windows)
풍부한 지원 소프트웨어
운영 체제의 구조
자원들을 관리하는 것이 운영체제의 기능
CPU
어떤 프로그램한테 CPU를 할당할 것인가? CPU 스케줄링
먼저 온 순서대로 처리 → 하나의 프로그램이 오랜 시간동안 점유하고 있다면 다른 프로그램들은 하염없이 기다려야 한다.(비효율적)
CPU 자체는 굉장히 빠른데, 작업들이 CPU를 얻은 다음에 놓지 않으려고 한다면 빠른 자원을 효율적으로 활용할 수 없기에 CPU 스케줄링은 짧은 시간 간격으로 CPU를 줬다 뺐는 방식을 일반적으로 사용
(이론) CPU를 가장 짧게 사용할 프로그램한테 CPU를 가장 먼저 줘야 함 → 나머지 프로그램들의 응답 시간이 짧아지면서 평균적인 성능이 좋아짐
Memory
메모리 공간은 한정되어 있는데 여러 프로그램들이 동시에 메모리에 올라가고 싶어함
어떤 프로그램한테 메모리를 얼만큼 할당해야 하는가? 메모리 관리
공평하게 1/N → 사실 공평하지 않다
메모리를 분배하는 이슈에 있어서는 프로그램이 점점 많아지면 각각이 가지는 메모리 공간이 점점 작아지기 때문에 프로그램이 원활하게 실행 불가
CPU에서 프로그램이 실행되려면 최소한 실행에 필요한 부분이 메모리에 올라와있어야 한다.(디스크 아무리 있어도 실행안됨) → Stored Program Concept
지나치게 프로그램이 많으면 CPU에서 프로그램을 실행하려고 할 때 해당 프로그램이 메모리에 없어서 Disk에서 읽어와야 한다.
원활하게 전체 시스템 실행 불가
동시에 많은 프로그램을 올려놓는 것보다는 그 정도 메모리는 받을 수 있도록 지원해주자Working Set Model
Working Set Model
공평하게 나누는 것이 아니라 그때그때 특정 프로그램에게 몰아주면 더 원활하게 실행 가능
어떤 프로그램을 메모리에서 쫓아내야 하는가?
해당 프로그램을 다시 사용하게 될 지 미래 예측을 해야 함
다시 사용될 가능성이 있는지 예측 → 최근에 사용을 많이 했는지
Disk
디스크에서 파일을 어떻게 보관하는가? 파일 관리
조각조각으로 나눌지, 연속적으로 관리하는게 좋을지
디스크 스케줄링
디스크를 읽거나 쓰거나하는 요청을 어떤 순서대로 처리할 것인가?
Head에 가까운 위치에 들어온 요청이 있다면 순서를 바꿔서 디스크 Head의 이동을 줄이는 쪽으로 해서 사용 → 디스크의 성능이 높아짐
CPU 스케줄링과의 차이
I/O device
입출력 장치와 컴퓨터 내부가 어떻게 정보를 주고 받게 할 것인가? 입출력 관리
Interrupt에 기반해서 관리
Interrupt를 걸어서 입출력장치가 CPU에게 보고한다. → 다음 작업 전에 입출력 장치가 요청한 것을 확인하고 처리해줌
CPU가 최대한 방해받지 않고 사용하게 해줌
프로세스 관리(소프트웨어, 프로그램 관리)
프로세스의 생성과 삭제
자원 할당 및 반환
프로세스 간 협력
그 외
보호 시스템
네트워킹
명령어해석기(command line interpreter)