프로그램이 저장되어 있는 곳 = 보조기억장치
프로그램이 로딩되는 곳 = 주 기억장치
프로그램을 실행해주는 주체 = 프로세스
작업을 처리해주는 주체 = 쓰레드
대기 큐
- Job Queue : HDD에 있던 프로그램 실행 시 메인 메모리가 가득 찼거나, CPU가 다른 작업 수행 중이라면 기다리는 곳 (음식점에 손님이 많을 때 밖에서 대기하는 대기줄)
- Ready Queue : 메인 메모리에 프로그램이 올라왔더라도 미리 실행 중인 다른 프로그램들의 다음 순번을 기다리는 곳 (음식점 자리에 앉았으나, 알바들이 바뻐서 주문을 받으러 오기 전까지 기다리는 상황)
- Device Queue : I/O장치의 실행 큐 (주문이 들어가고 주문에 맞는 음식이 눈 앞에 서빙 되는 순서에 대한 큐)
- 종료에 대한 큐가 없는 이유 => 종료는 그냥 끄면 끝
스케줄링
- Job Scheduler : Job Queue에 대한 스케줄러, 메모리가 가득차는 경우는 자주 발생하지 X -> 'LongTerm Scheduler'
- CPU Scheduler : Ready Queue에 대한 스케줄러, 제일 자주 사용하는 CPU 스케줄링이 제일 중요! -> 'ShortTerm Scheduler'
- Device Scheduler : Device Queue에 대한 스케줄러
주-보조 교환 (Swapping)
- Swapping
- 서버와 같이 여러 사용자가 하나의 메모리를 공유하는 경우에 만약 한 사용자가 자리를 비우면 그 사용자가 돌아올 때 까지 해당 프로세스에 메모리를 할당할 이유가 없습니다! 😱
- 때문에 PCB(Process Control Block)의 CPU Time등을 확인해서 오랫동안 동작이 없는 프로세스는 잠시 HDD로 내려놓고, 다른 프로세스를 실행하거나 기존 프로세스에 메모리를 더 할당하는 등 메모리를 더 효율적으로 활용하고 다시 동작 요청이 들어오면 또 다시 메모리로 프로세스를 올립니다.
- Swap Out: 메모리에서 HDD로 내리기
- Swap In: HDD에서 메모리로 올리기
- 이렇게 임시 메모리의 목적으로 사용되는 HDD 공간을 Backing Store 혹은 Swap Device라고 합니다.
- Medium Term Scheduler
- Swapping 하는 것도 역시 프로세스가 메모리로 올라가고 내려오는 순서를 결정해야 하는데, 이 작업이 앞서 살펴본 shot term scheduler가 처리하는 것 보다는 적게 발생하고 long term scheduler가 처리하는 것보다는 많이 발생하기 때문에 Swapping은 Medium Term Scheduler가 스케줄링 합니다.
문맥 교환 (Context Switching)
- CPU가 일정 시간이 지나면 기존 프로세스를 준비 상태로 만들고 다른 프로세스를 수행 상태로 만들어 실행하는데, 이렇게 프로세스를 Switching 하는 것을 통틀어 Context Switching이라고 합니다.
- Context Switching을 담당하는 스케줄러는 CPU 스케줄러
- Dispatcher : 문맥 교환을 하는 과정에서 기존 프로세스에서 다른 프로세스로 스위치한 후 다시 기존 프로세스로 돌아 왔을 때, 기존 프로세스의 진행상황이 보존되어 있어야 수행하던 프로세스를 끊기지 않고 수행할 수 있다.
- 이러한 작업을 수행하는 프로그램이 Dispacher입니다.
- 왜 대부분의 OS는 CPU 스케줄링 방법 중 시간 공유 시스템을 사용할 까요? -> 프로세스의 작업을 짧은 시간 동안 CPU가 처리하고 문맥 교환하고의 과정으로 실행 시켰을 때 실제로는 CPU가 매우 빠르기 때문에 사용자는 동시에 실행하는 것 처럼 여러 프로그램을 이용할 수 있습니다.
프로세스 메모리
- Code - Data - Heap - Stack
- Code - 실행할 프로그램 코드가 저장됩니다.
- Data - 전역변수, 정적변수가 저장됩니다. BSS(Block Stated Symbol)에는 초기화 되지 않은 전역변수가 저장됩니다. -> 변수의 변경 사항 인지 가능
- Heap - 동적 데이터 영역, 해당 영역은 런타임에 결정된다, GC 가비지 컬랙터로 안쓰는 힙 영역을 지우는 청소부 역할 (자바, JS에도 있어!)
- Stack - 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장하는 공간, 지역 변수 크기가 너무 커지면 stack overflow 발생!
커널 프로세스의 메모리
- 커널? 운영 체제의 주요 구성요소로 하드웨어와 프로세스를 이어주는 핵심 인터페이스
- 커널은 메모리 관리, 프로세스 관리, 하드웨어와 프로세스 사이에서 명령을 즉시 실행할 수 있는(인터프리터)역할을 수행하거나, 시스템 호출, 보안 등의 역할을 합니다.
- 컴퓨터 하드웨어와 프로세스를 잇는 인터페이스
- Code - Data - Stack
- Code - 시스템 콜, 중단 처리 코드 운영체제 코드
- Data - CPU, Memory 등 자원 관리를 위한 자료구조가 저장, PCB(Process Control Block) 자료구조 저장 -> 현재 수행 중인 프로세스의 상태, CPU 사용 정보 등을 유지하기 위한 자료구조 Process의 메타 데이터 즘 되는 듯? , 프로세스에 대한 정보를 가지고 있는 구조체
- Stack - 각 Process의 커널 스택을 저장, - 프로세스는 함수 호출시 자신의 복귀 주소를 저장하지만, 커널은 커널 내의 주소가 된다.
- 각각의 프로세스마다 별도의 스택을 두어 관리한다.