운영체제 이해하기
in Development on OS
운영체제(Operation System)의 개론 공부를 하고 작성한 글입니다
- PC를 구입하면 Windows XP, Linux, MS-DOS, Mac OSX 등등의 운영 체제(Operating System)가 설치되어 있음
- 운영체제가 없는 컴퓨터는 어떤 상황일까?
- 컴퓨터는 프로세서와 메모리로 구성되어 있음
- 메모리에 임의의 값이 들어가있어 process가 아무것도 할 수 없음. 야생마!
- 프로그램을 실행하려면?
- 하드디스크 안에 실행 파일이 존재 => 메모리에 올려야 함 => 올리는 역할을 OS가 함. OS가 없는 컴퓨터라면 올릴 수 없음
- 여러 개의 프로그램을 동시에 실행시키려면?
- 프로세스는 1개인데 동시에 여러개를 실행하는 것도 OS가 해줌
- 프린터에 인쇄 명령을 내리려면?
- 하드 디스크에 저장하려면?
- 운영체제
- 컴퓨터 하드웨어를 잘 관리해 : 프로세서, 메모리, 디스크, 키보드, 마우스, …
- 성능을 높이고 : Performance
- 사용자에게 편의성 제공 : Convenience
- 컴퓨터 하드웨어를 관리하는 프로그램
- Control program for computer
- 부팅(Booting)
- 컴퓨터 구조
- 프로세서, 메모리(ROM, RAM), 하드디스크
- POST(Power-On Self Test) : 전기를 키면 환경 설정이 잘 되어 있는지 Test. ROM에 있음
- 부트로더(Boot Loader) : 하드디스크에 있는 OS 정보를 찾아 메인 메모리의 램 영역으로 올림. 이 작업을 부팅이라 함
- OS는 전기를 끄면 사라짐
- 컴퓨터 구조
- 운영체제
- 관리(Management) 프로그램
- 프로세서, 메모리, 디스크, 입출력장치 드라이브
- 메모리에 Resident(상주)
- 커널(kernel) vs 명령 해석기(shell, command interpreter)
- 커널 : 하드웨어를 제어하고 관리하는 부분
- 쉘 : OS의 껍질. 명령어를 실행하는 부분
- 운영체제는 정부와 비슷
- 자원 관리자 (resource manager)
- 자원 할당자 (resource allocator)
- 주어진 자원을 어떻게 잘 활용할까? (국토, 인력, 예산)
- 정부가 직접 일하진 않고 민간 기업이 일함
- 정부 부서가 존재 : 행정자치부, 교육부, 국방부 …
- 운영 체제 부서 : 프로세스 관리, 메모리 관리, 파일 관리, 입출력장치 관리 …
운영체제 역사
- 컴퓨터의 역사 : 1940년대 말에 만들어짐
- 하드웨어 발전 vs 운영체제 기술 발전
- Batch Processing : 일괄 처리, 묶어서 처리. resident monitor. 최초의 OS
- Multiprogramming system : 다중프로그래밍
- 40년대, 50년대 컴퓨터는 매우 비싼 자원
- 빠른 CPU(계산), 느린 IO => 메모리에 여러 개의 job
- CPU scheduling, 메모리 관리, 보호
- Time Sharing system : 시공유 시스템
- 강제 절환, interactive system (대화형)
- 빠른 스위칭
- 기술발전: 가상 메모리, 프로세스간 통신, 동기화
- 하드디스크를 메모리처럼 사용하는 기술
- 동시에 여러가지 일을 진행, 요즘 나오는 OS 대부분은 이 시스템
- 컴퓨터 규모별 분류
- Supercomputer > Mainframe > Mini > Micro
- Supercomputer > Server > Workstation > PC > Handheld > Embedded
- 고성능컴퓨터의 OS 기술이 Handheld/Embedded 까지
- Batch processing
- Multiprogramming
- Timesharing
고등 운영체제
- 1) 다중 프로세서 시스템 (Multiprocessor system)
- 메모리는 1개인데 CPU(프로세스)가 여러 개
- 병렬 시스템 (parallel system)
- 강결합 시스템 (tightly-coupled system) : 하나의 메모리에 CPU가 결합
- 3가지 장점: performance, cost, reliability
- ☞ 다중 프로세서 운영체제 (Multiprocessor OS)
- 2) 분산 시스템 (Distributed system)
- CPU-Memory 쌍이 LAN으로 구성
- 하둡
- 다중 컴퓨터 시스템 (multi-computer system)
- 3가지 장점: performance, cost, reliability
- 소결합 시스템 (loosely-coupled system)
- ☞ 분산 운영체제 (Distributed OS)
- 3) 실시간 시스템 (Real-time system)
- 시간 제약: Deadline
- 공장 자동화 (FA), 군사, 항공, 우주
- ☞ 실시간 운영체제 (Real-time OS = RTOS)
인터럽트 기반 시스템
- Interrupt-Based System
- 현대 운영체제는 인터럽트 기반 시스템!
- 부팅시
- ROM에 있는 부트로더 실행
- OS 정보를 메인 메모리로 가져옴
- 부팅이 끝나면?
- 운영체제는 메모리에 상주 (resident)
- 사건(event)을 기다리며 대기: 키보드, 마우스, …
- 하드웨어 인터럽트 (Hardware interrupt)
- 인터럽트 결과 운영체제 내의 특정 코드 (ISR) 실행
- Interrupt Service Routine 종료 후 다시 대기
- 소프트웨어 인터럽트 (Software interrupt)
- 사용자 프로그램이 실행되면서 소프트웨어 인터럽트 (운영체제 서비스 이용 위해)
- 인터럽트 결과 운영체제 내의 특정 코드 실행 (ISR)
- ISR 종료 후 다시 사용자 프로그램으로
- 인터럽트 기반 운영체제
- 운영체제는 평소엔 대기 상태를 유지
- 하드웨어 인터럽트에 의해 운영체제 코드 (ISR) 실행
- 소프트웨어 인터럽트에 의해 운영체제 코드 실행
- 내부 인터럽트(Interrnal interrupt)에 의해 운영체제 코드 실행 : 코드에서 0으로 나누는 것이 있으면? 계산할 수 없으니 강제 종료시켜야 함. 이런 경우 내부 인터럽트
- ISR 종료되면 원래의 대기상태 또는 사용자 프로그램으로 복귀
이중모드
- 한 컴퓨터를 여러 사람이 동시에 사용하는 환경
- 또는 한 사람이 여러 개의 프로그램을 동시에 사용
- 한 사람의 고의/실수 프로그램이 전체 영향
- STOP, HALT, RESET 등
- 이런 명령어들은 관리자만 내릴 수 있도록 해야겠다 => 이중 모드
- 사용자 프로그램은 STOP 등 치명적 명령 사용 불가하게!
- 사용자 (user) 모드 vs 관리자 (supervisor) 모드
- 이중 모드 (dual mode)
- 관리자 모드 = 시스템 모드 = 모니터 모드 = 특권 모드
- Supervisor, system, monitor, priviliged mode
- 특권 명령 (privileged instructions)
- STOP, HALT, RESET, SET_TIMER, SET_HW, …
- 이중 모드 (dual mode)
- 레지스터에 모드를 나타내는 플래그(flag)
- flag : overflow, carry, negative, zero, 모니터 비트로 모드 확인
- 운영체제 서비스 실행될 때는 관리자 모드
- 사용자 프로그램 실행될 때는 사용자 모드
- 하드웨어/소프트웨어 인터럽트 발생하면 관리자 모드
- 운영체제 서비스가 끝나면 다시 사용자 모드
- 일반 유저가 특권 명령을 실행하려고 하면 CPU가 모니터 비트를 확인하고, 관리자 모드가 아님을 인지. 내부 인터럽트 발생해서 서비스 루틴으로 점프해 강제 종료
- 레지스터에 모드를 나타내는 플래그(flag)
- 일반적 프로그램의 실행
- 프로그램 적재 (on memory)
- 프로그램이 하드디스크에 있는 저장하고 싶은 경우 os에게 인터럽트 발생해 요청 (python에서 import os를 생각해보면..!)
- user mode → (키보드, 마우스) → system mode (ISR) → user mode → (모니터, 디스크, 프린터) → system mode (ISR) → user mode → ……
하드웨어 보호
- 입출력장치 보호 (Input/output device protection)
- 메모리 보호 (Memory protection)
- CPU 보호 (CPU protectiopn)
입출력장치 보호
- 사용자의 잘못된 입출력 명령
- 다른 사용자의 입출력, 정보 등에 방해
- 예: 프린트 혼선, 리셋, 다른 사람의 파일 읽고 쓰기 (하드디스크)
- IN, OUT 명령을 아무나 못 하도록
- 해결법
- 입출력 명령을 특권명령으로: IN, OUT
- 입출력을 하려면 운영체제에게 요청하고 (system mode 전환),
- 운영체제가 입출력 대행; 마친 후 다시 user mode 복귀
- 올바른 요청이 아니면 운영체제가 거부
- 사용자가 입출력 명령을 직접 내린 경우?
- Privileged instruction violation : 특권 명령을 침범
메모리 보호
- 다른 사용자 메모리 또는 운영체제 영역 메모리 접근
- 우연히 또는 고의로
- 다른 사용자 정보/프로그램에 대한 해킹
- 운영체제 해킹
- 해결법
- 문지기(MMU)를 두어 다른 메모리 영역 침범 감시하도록 (Memory Management Unit)
- MMU 설정은 특권명령: 운영체제만 바꿀 수 있다
- 다른 사용자 또는 운영체제 영역 메모리 접근 시도?
- Segment violation : 영역 침범
CPU 보호
- 한 사용자가 실수 또는 고의로 CPU 시간 독점
- 예: while (n = 1) …
- 다른 사용자의 프로그램 실행 불가
- 해결법
- CPU Protection
- Timer를 두어 일정 시간 경과 시 타이머 인터럽트
- 인터럽트 → 운영체제 → 다른 프로그램으로 강제 전환
운영체제 서비스
- 프로세스 관리
- 주기억장치 관리
- 파일 관리
- 보조기억장치 관리
- 입출력 장치 관리
- 네트워킹
- 보호
- 그외
프로세스 관리
- Process management
- 프로세스 (process)
- 메모리에서 실행 중인 프로그램 (program in execution)
- 주요기능
- 프로세스의 생성, 소멸 (creation, deletion)
- 프로세스 활동 일시 중지, 활동 재개 (suspend, resume)
- 프로세스간 통신 (interprocess communication: IPC)
- 프로세스간 동기화 (synchronization)
- 교착상태 처리 (deadlock handling)
주기억장치 관리
- Main memory management
- 주요기능
- 프로세스에게 메모리 공간 할당 (allocation)
- 메모리의 어느 부분이 어느 프로세스에게 할당되었는가 추적 및 감시
- 프로세스 종료 시 메모리 회수 (deallocation)
- 메모리의 효과적 사용
- 가상 메모리: 물리적 실제 메모리보다 큰 용량 갖도록
파일 관리
- File management
- Track/sector 로 구성된 디스크를 파일이라는 논리적 관점으로 보게
- 주요기능
- 파일의 생성과 삭제 (file creation & deletion)
- 디렉토리(directory)의 생성과 삭제 (또는 폴더 folder)
- 기본동작지원: open, close, read, write, create, delete
- Track/sector 와 file 간의 매핑(mapping)
- 백업(backup)
보조기억장치 관리
- Secondary storage management
- 하드 디스크, 플래시 메모리 등
- 주요기능
- 빈 공간 관리 (free space management)
- 블락이 점점 사용된 공간, 비어있는 공간으로 나뉘는데 이런 공간 관리
- 저장공간 할당 (storage allocation)
- 디스크 스케쥴링 (disk scheduling)
- 헤드를 적게 움직이며 원하는 트랙을 읽을 수 있을까
- 빈 공간 관리 (free space management)
입출력 장치 관리
- I/O device management
- 주요기능
- 장치 드라이브 (Device drivers)
- 입출력 장치의 성능향상: buffering, caching, spooling
시스템 콜
- System calls
- 프로세서가 운영체제 서비스를 받기 위해 호출(요청)
- 주요 시스템 콜
- Process: end, abort, load, execute, create, terminate, get/set attributes, wait event, signal event
- Memory: allocate, free
- File: create, delete, open, close, read, write, get/set attributes
- Device: request, release, read, write, get/set attributes, attach/detache devices
- Information: get/set time, get/set system data
- Communication: socket, send, receive
프로세스 관리
- CPU 자원을 효율적으로 관리
- 프로그램 vs 프로세스 (program vs process)
- process, task, job …
- 프로세스 : 실행중인 프로그램(program in execution): text + data + stack, pc, sp, registers, …
- 메모리 상에서 실행되는 작업 단위
- 일반적으로 CPU는 한번에 하나의 프로세스만 관리할 수 있음
- 프로그램 : 실행 되기 전의 명령어와 데이터의 묶음
- 무덤 속 프로그램, 살아 움직이는 프로세스
- 프로세스 상태
- new, ready, running, waiting, terminated
- new : 메인 메모리에 올라온 상태
- ready : 실행할 준비가 되어있는 상태
- running : CPU가 실제 실행한 상태
- waiting : CPU가 다른 작업을 진행하면 기존 작업은 waiting
- terminated : 종료
- new, ready, running, waiting, terminated
- PCB: Process Control Block
- Task Control Block (TCB)
- 프로세서 제어 블록, 프로세스에 대한 모든 정보 보유
- process state (running, ready, waiting, …), PC, registers, MMU info (base, limit), CPU time, process id, list of open files, …
- 사람과 비유? : 정부는 내 정보를 모두 기록하고 있음. PCB와 주민등록 등본과 유사
- 프로세스 대기열 (queue)
- Job Queue
- Job scheduler
- Long-term scheduler
- Ready Queue
- CPU scheduler
- Short-term scheduler
- Device Queue
- Device scheduler
- Job Queue
- Multiprogramming
- Degree of multiprogramming
- i/o-bound vs CPU-bound process
- Medium-term scheduler
- Swapping
- 메모리에 올라와 있지만 아무 작업도 안하는 경우 디스크에 해당 메모리를 저장한 후(swap out), 사용하던 메모리를 다른 프로세서에게 분배
- 다시 작업이 진행될 경우 다시 메모리를 가지고 옴(swap in)
- 이런 작업들을 통칭 swapping이라고 함
- 컴퓨터의 성능 향상을 위해 진행
- Swapping
용어
- Context switching (문맥전환)
- 프로세스가 메모리에 여러개 있어도 어느 순간엔 1개만 진행할 수 있음
- p1->p2, p2->p3
- Scheduler
- 지금 프로세스가 끝나고 어떤 프로세스를 실행할 것인가를 결정
- Dispatcher
- 실제로 스케쥴러가 선택한 프로세스를 실행하도록 상태, 레지스터의 값을 바꿔줌
- 어셈블리 같은 로우 레벨 코드로 짜야됨
- 준비상태의 프로세스들 중에서 우선순위가 가장 높은 프로세스에게 CPU를 할당
- Context switching overhead
- 하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해, 이전의 프로세스의 상태(문맥)를 보관하고 새로운 프로세스의 상태를 적재하는 작업
- Running 상태의 Task가 사용하던 Context를 메모리 특정 영역에 저장한 후 새로이 수행 될 Task의 Context를 TCB또는 Stack에서 CPU의 레지스터 영역으로 복사하여 새로운 Task가 수행되도록 하는 일련의 작업
Reference
카일스쿨 유튜브 채널을 만들었습니다. 데이터 사이언스, 성장, 리더십, BigQuery 등을 이야기할 예정이니, 관심 있으시면 구독 부탁드립니다 :)
PM을 위한 데이터 리터러시 강의를 만들었습니다. 문제 정의, 지표, 실험 설계, 문화 만들기, 로그 설계, 회고 등을 담은 강의입니다
이 글이 도움이 되셨거나 다양한 의견이 있다면 댓글 부탁드립니다 :)