프로세스 관리
메모리 관리
하드웨어 관리
⇒ 운영체제의 판단 하에, 적절한 위치에 사용자의 데이터 저장
파일 시스템 관리
스위치와 배선 작업 → HW의 비용 ↑↑
⇒ CPU를 최대한 많이 사용할 수 있는 법?
programmer가 펀치카드를 여러 개 제작
→ operator가 여러 개를 한 번에 컴퓨터에 전달
→ 컴퓨터는 여러 개의 프로그램을 순서대로 실행해서 결과를 한번에 확인할 수 있도록 개발
한계 : CPU와 입출력을 분리하여도, 입력을 받기 위한 대기 시간에는 CPU의 사용률이 떨어진다
ex) 입력을 처리하는 작업일 때 입력이 전부 완료되어야만 처리할 수 있음
⇒ 이렇게 기다리는 시간에는 CPU의 사용률이 떨어짐
**memory에 여러 program을 올려두고 시간을 나누어, 각 프로그램을 짧은 시간씩 돌아가며 실행
Single Stream Batch system의 한계 개선
Terminal
File System
UNIX
C언어로 UNIX 운영체제 개발 (AT&벨 연구소)
Multi-programming, Multi-user, File system 구현
메모리 침범
메모리 주소 할당
⇒ Base Register
: program의 시작주소를 저장 ⇒ “모든 프로그램은 0번지에서 실행한다”고 가정
이미지 출처 : https://math-coding.tistory.com/80
Kernel : process, memory, storage를 관리하는 핵심 기능
Interface : 사용자는 interface를 통해서 OS의 Kernel에 접근 가능 (직접 접근 불가)
⇒ user/application - system call
- kernel - driver
- HW
CPU
- BUS
- Memory(RAM)
BUS
: 데이터를 전달하는 통로0. Main Board : 다른 하드웨어를 연결하는 장치
BUS
가 담당1. CPU (중앙처리장치)
ALU (Arithmetic and Logic Unit) : 실제 데이터 연산 담당 (산술논리 연산장치)
Control Unit : 모든 장치들의 동작을 지시하고 제어하는 장치
Register : CPU 내 계산 위해 임시로 보관하는 장치
2. Memory (주기억장치) : RAM & ROM
RAM : Random Access Memory | ROM : Read Only Memory |
---|---|
데이터 저장된 위치 상관없이, 읽는 속도 동일 | 데이터 한 번 쓰면 수정 불가 |
(데이터 읽기만 가능) | |
Main memory로 사용 | 컴퓨터 부팅과 관련된 BIOS를 저장에 사용 |
전력이 끊기면 데이터 유실 | 전력이 끊겨도 데이터를 계속 보관 |
2-1) Cache Memory : CPU와 주기억장치 사이의 속도차이 완화 시키기 위한 고속 buffer memory
2-2) 주기억장치(RAM/ROM) & 보조기억장치
주기억장치 ( Computer/Primary Memory ) | 보조기억장치 ( Auxiliary/Secondary Memory ) |
---|---|
PC 내부에서 CPU가 처리하고 있는 내용 저장 | 저장된 데이터가 사라지지 않고 영구적으로 보관 |
용량 큼 | |
처리속도 빠름 | 주기억장치보다 느림 |
CPU명령에 의해 기억된 장소에 직접 접근하여 읽고 씀 | 물리적인 디스크가 연결되어 있음 |
RAM, ROM | HDD, SSD |
전원
→ ROM에 저장된 BIOS 실행
→ 하드디스크에 있는 MBR (Master Boot Record)에 저장된 Boot Loader를 RAM으로 가져와 실
→ OS 2개 이상일 경우 OS 선택
→ OS를 RAM으로 불러와 실행
→ 이후 실행되는 모든 program은 OS가 관리
BIOS : 전원, CPU, 메모리, 하드디스크 등 주요 HW에 이상이 없는지 체크
if) CPU가 입출력장치에 데이터를 Read/Write하는 상황
Polling 방식 : CPU 입장에서는 입출력 명령이 언제 완료될 지 알 수 없기 때문에 주기적으로 확인 필요
Interrupt 방식 : CPU가 입출력 관리자에게 입출력 명령을 내리고 다른 작업 지속
HW Interrupt : keyboard, 마우스 입력, 디스크 입출력, 프린터
SW Interrupt : 사용자 program에서 발생한 interrupt
Program : 컴퓨터 디스크에 저장된 정적인 file (보조기억 장치)
Process : 프로그램이 메모리에 올라가, 실제로 실행 중인 동적인 entity
Program + 실행에 필요한 자원 할당 ⇾ Process
OS로부터 할당 받는 자원 :
1. CPU 시간
2. 운영되기 위해 필요한 주소 공간
3. 독립된 메모리 영역 (Code/Data/Stack/Heap 구조)
각 Process 별 별도의 주소 공간 & 독자적인 메모리 공간 ⇾ 다른 Process의 변수/자료구조에 접근 불가
IPC (Process간 통신) : 다른 Process의 자원에 접근 허용
Process : min 1 Thread = Main Thread
Thread : Process가 할당받은 자원을 이용하는 실행 단위 / Process의 특정한 수행 경로 / Process 내 실행되는 여러 흐름의 단위
POSIX Pthreads
, Windows threads
, Java threads
Process | Thread | |
---|---|---|
정의 | 실행 중인 program | Process의 실행 단위 |
생성/종료시간 | 많은 시간 소요 | 적은 시간 소요 |
Context Switching | 많은 시간 소요 | 적은 시간 소요 |
상호작용 | IPC 사용 | 공유 memory 사용 |
자원소모 | 많음 | 적음 |
메모리 내 독립성 | 각각 독립적 | 프로세스 내 stack/register 독립적, 이외 공유 |
Processor = CPU : computer 내 program을 수행하는 HW Unit (명령어 해석하는 한 부분)
Process의 동시성 & 병렬성 (Concurrency & Parallelism)
processor는 한번에 1개의 process만 실행
동시성 = Context Switching : processor 하나가 program 1,2,3,4 여러 작업을 돌아가며 일부분씩 수행하는 방식
병렬성 = Processor 1에 Core 여러 개가 달려서 각각 동시에 작업하는 방식
Multi - Processing | Multi - Threading | |
---|---|---|
정의 | 응용 프로그램 1 → 여러 개의 process | 응용 프로그램 1 → 여러 개의 thread |
장점 | process에 문제가 발생하면 그것의 자식 proecss만 죽음(다른 영향 x) | 1. System 자원 소모 감소 (자원 효율성 증대) (process를 생성하여 자원 할당하는 system call이 줄어들어 자원을 효율적으로 관리할 수 있음) 2. System 처리량 증가 (처리 비용 감소) ( Thread 간 data 교환이 간단해지고 system 자원 소모 감소, Thread 사이 작업량이 작아 Context switching이 빠름) 3. Program 응답 시간 단축 (Process 내 stack 이외 모든 memory를 공유하므로 통신의 부담 적음) |
단점 | 1. Context Switching 과정에서 cache memory 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드 발생 ( process 사이에 공유하는 memory가 없음 → Context Switching발생 시 cache에 있는 모든 data를 모두 reset하고 다시 cache 정보를 불러와야 함) 2. Process 간 IPC 통신할 때, process 간 변수 공유 불가 (process가 각각 독립된 memory 영역을 할당받았기 때문에) | 1. 주의 깊은 설계 필요 2. 까다로운 디버깅 3. single process system 은 큰 효과 X 4. process 밖에서 thread 각각 제어 불가 5. 자원 공유의 문제 발생 (동기화 문제) 6. Thread 1개의 문제가 전체 Process에 영향 |