프로그램이 저장되는 곳 - 보조 기억장치
프로그램이 로딩되는 곳 - 주 기억장치
프로그램을 실행하는 주체 - 프로세스
작업을 처리하는 주체 - 쓰레드
프로세스 생명주기 = 프로세스 상태변화
프로세스 상태
- 신규
- 프로세스가 이제 막 메인메모리에 올라온 상태
- 수용을 거쳐 준비 상태가 되야 실행 가능
- 준비
- 변수 초기화와 같은 준비작업을 마쳐 실행이 가능한 상태
- 스케쥴러를 통해 발송되어야 수행 상태가 됨
- 신규 상태에서 수용/대기 상태에서 입출력 or 이벤트가 완료/수행 상태가 중단되면 준비 상태가 됨
- 수행
- CPU가 실제로 프로세스를 실행하는 상태
- 선점 스케쥴링에 의해 중단 > 준비
- 입출력 or 이벤트가 필요 > 대기
- 수행 완료 > 종료
- 대기
- 프로세스 중에 입출력이 필요해 입출력을 수행하는 상태
- CPU는 이때 다른 프로세스를 수행
- 대기 상태가 끝나면 프로세스는 준비 상태가 되고 곧 수행 상태가 됨
- 종료
- 최종적으로 프로세스가 종료된 상태
- 사용하던 메모리 영역 해제
대기 큐
- Job Queue
- HDD에 있던 프로그램들이 메모리로 올라가야 하는데 메모리가 이미 가득 찼거나 CPU가 다른 작업을 수행중일 때 이 프로그램들이 대기할 공간
- Ready Queue
- 이미 메모리에 올라온 프로그램이 실행되기 전 다른 프로그램이 수행 중이면 대기 상태가 되거나 선점 스케쥴리에 의해 준비 상태가 될 때까지 대기할 공간
- Device Queue
- 입출력 장치를 사용하려면 입출력을 위해 대기 중이던 다른 작업들이 끝난 후에야 사용할 수 있다.
- 각각의 입출력 장치들은 각자의 대기 큐(ex. 키보드 큐, 마우스 큐, ...)를 가지고 있는데, 이 큐들을 통틀어서 Device Queue라고 부른다.
스케쥴링
- Job Scheduler
- Job Queue의 프로그램들을 어떤 순서로 메모리에 올릴 것인지 결정
- 이러한 과정은 프로그램이 새로 시작될 때, 메인메모리가 가득찬 경우 등의 상황에만 발생하므로 자주 일어나지 않고 어쩌다 한번(수분 ~ 수십분) 일어난다.
- 이와 같이 긴 간격으로 동작하는 스케쥴러를 Long Term Scheduler라고 한다.
- CPU Scheduler
- Ready Queue의 프로세스들을 어떤 순서로 서비스 할 것인지 결정
- 모든 스케줄링 중에서 CPU 스케줄링이 가장 중요
- 시공유 시스템의 경우 이러한 과정은 1초에도 수십번에서 많게는 수백번도 일어나기 때문에 이러한 스케줄러를 Short Term Scheduler라고 한다.
- Device Scheduler
- Device Queue의 프로세스들을 어떤 순서로 입출력 장치를 이용하게 할 것인지에 대한 스케줄러
- 이는 Disk Scheduler, Printer Scheduler, Mouse Scheduler 등 I/O, 보조기억 장치 스케줄러를 통틀어 가리킨다.
- I/O Bound Process VS CPU Bound Process
- 각각 입출력/CPU 연산에 대부분의 시간을 보내는 프로세스인데, 운영체제(Job Scheduler)는 성능을 위해 각자가 너무 오래 쉬지 않게 배합해야 한다.
주-보조 교환
- 서버처럼 여러 사용자가 하나의 메모리를 공유하는 경우 한 사용자가 자리를 비웠을 때 돌아올 때까지 해당 사용자를 위해 메모리를 할당하는 비효율적이다.
- 따라서 CPU Time 등을 통해 오랫동안 동작이 없는 프로세스는 잠시 HDD로 내려놓고 기존 프로세스에 메모리를 더 할당하는 등의 방식으로 메모리를 더 효율적으로 사용할 수 있다.
- 그러다 사용자가 돌아오면 다시 HDD에서 메모리로 올리는 작업을 Swapping이라고 한다.
- Swap out - 메모리에서 HDD로 내리는 작업
- Swap in - HDD에서 다시 메모리로 올리는 작업
- 이렇게 임시 메모리처럼 사용되는 HDD 공간을 Backing Store 혹은 Swap Device라고 한다.
- Swapping 같은 스케줄링 작업은 Long Term 보다는 자주 일어나고 Short Term 보다는 적게 일어나 Midium Term Scheduling이라고 한다.
문맥 교환(Context Switching)
- Context Switching
- 시간공유 시스템의 경우 기존 프로세스의 작업 시간이 너무 길어지면 선점 스케쥴링을 통해 프로세스를 준비 상태로 만들고 다른 프로세스를 수행 상태로 바꿔 실행한다.
- 이처럼 실행하는 프로세스를 Switch 하는 작업을 통틀어 Context Switching이라고 한다.
- Scheduler
- Context Switching를 전문적으로 담당하는 스케쥴러 - CPU 스케쥴러
- Dispatcher
- 작업중이던 프로세스가 사용하던 데이터를 레지스터에 올려놓고, 스위치 할 때 이 데이터들을 보존해야 해당 프로세스가 다시 수행 상태가 됐을 때 작업이 끊기지 않을 것이다.
- 이러한 작업을 수행하는 프로그램을 Dispatcher라고 한다.
프로세스 메모리 구조
- Code
- 실행할 프로그램의 코드가 저장되고, CPU가 이 영역에서 명령어를 하나씩 가져와 처리
- Data
- 전역변수와 정적변수 저장되고 이 변수들은 프로그램이 시작될 때 할당되어 프로그램 종료 시 소멸
- BSS 영역
- 초기화 된 전역변수는 Data 영역에 저장되어 비휘발성 메모리 ROM에 저장되는데 이 비용이 많이 들어 RAM과 ROM에 저장될 데이터를 구분하기 위해 영역도 구분하여 사용
- Heap
- 동적 데이터 영역
- 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다. 따라서 런타임 때 크기가 결정된다.
- 자바에서는 객체를 heap 영역에 저장하고 안쓰는 heap 영역을 치우는 GC를 사용해 정리한다.
- Stack
- 지역변수, 매개변수, 리턴값 등의 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장하는 영역
- 함수 호출 시 기록하고 수행이 완료되면 사라지는데, 자료구조 Stack과 같은 방식(후입선출)으로 저장/출력된다.
- 영역의 크기는 컴파일 때 결정되므로 무한정 할당 할 수 없다.
- 따라서 재귀함수가 반복돼서 호출하거나 지역변수를 메모리가 초과될 정도로 가지고 있다면 stack overflow가 발생
커널 프로세스의 메모리
커널
운영체제의 주요 구성요소로서 하드웨어와 프로세스를 잇는 핵심 인터페이스
명령을 즉시 실행할 수 있는 인터프리터 역할이나 시스템의 호출, 보안 등의 기능을 수행
응용 프로그램을 조회해서 강제 종료할 수 있는 기능도 커널의 역할
따라서 하나의 프로세스가 아닌 인터페이스로 취급한다.
- Code
- 시스템 콜, 중단 처리 코드
- 자원 관리를 위한 코드
- 편리한 인터페이스 제공을 위한 코드
- Data
- PCB 자료구조가 저장되어있다.
- 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영체제 커널의 자료구조
- 현재 수행 중인 프로세스의 상태, CPU 사용 정보 등을 유지하기 위한 자료구조
- OS내부의 Process Management 부서에서 관리되며, PC, Register, MMU 정보, Process의 상태, CPU Time, PID(Process ID)등 많은 정보들이 포함됨
- 간단히 말해서 운영체제가 프로세스에 대한 정보를 담고있는 구조체
- PCB 자료구조가 저장되어있다.
- Stack
- 각 프로세스의 커널 스택을 저장
- 각각의 프로세스마다 별도의 스택을 두어 관리
'TIL > CS' 카테고리의 다른 글
디자인 패턴 (0) | 2023.10.11 |
---|---|
DBMS의 기능과 종류 (0) | 2023.08.30 |
쓰레드와 쓰레드 풀 (0) | 2023.08.24 |
CPU와 메모리 예상 문답 (0) | 2023.08.22 |
CPU와 메모리 (0) | 2023.08.21 |