-
컴퓨터 구조, 프로세스 (메모리 구조, 상태 전이, 스케줄링)CS기초/운영체제 2022. 5. 17. 14:44728x90반응형
프로그램
작업 수행을 위한 일련의 명령어들의 모음
프로세스
디스크에 적재되어있던 프로그램이 운영체제의 PCB(Process Control Block)를 받아, 메인 메모리에 적재된 상태
운영체제는 프로세스 테이블을 사용해 각 프로세스 PCB를 관리한다.
- Stack : 함수 호출 시 관련 지역변수, 매개변수같은 임시 데이터가 저장되는 곳. 컴파일 타임에 크기가 결정되기 때문에 무한히 할당할 수 없고 stack 영역을 초과하면 stack overflow 에러가 발생한다.
- Heap : 동적으로 할당되는 데이터가 저장되는 곳으로 런타임에 크기가 결정됩니다. ex) malloc
- Data
- Uninitialized data (bss) - 초기화되지 않은 변수(전역 변수, static 변수)가 저장되는 곳.
- Initialized data - 초기화된 변수(전역변수, static 변수)가 저장되는 곳.
- Code : 프로그램 코드가 저장되는 곳. 컴파일 타임에 결정되고 중간에 코드를 바꿀 수 없게 Read-Only 로 지정돼있다.
프로세서
컴퓨터 운영을 위해 기본적인 명령어들을 처리하고 반응하기 위한 논리회로
점차 CPU라는 용어로 대체되어 같은 의미로 쓰인다.
컴퓨터를 뇌에 비유하면 단기기억 담당은 RAM, 장기기억 담당은 하드디스크, CPU는 사고를 담당하는 대뇌피질
CPU 구성 요소
- 산술논리 연산장치(ALU): 산술연산과 논리연산(AND, OR등) 연산 담당
- 제어장치: 모든 장치들의 동작을 제어하는 장치. 명령 레지스터에서 읽어들인 명령어를 해석하고, 해당하는 장치에 제어신호를 보내 실행하도록 지시.
- 레지스터: CPU 내부 메모리. 각종 명령어나 명령어의 주소, 연산에 필요한 데이터 등을 임시로 보관하는 가장 빠른 저장 장소. SRAM에서 레지스터로 데이터를 저장하며, ALU에서 계산한 후 다시 SRAM 으로 결과값을 저장한다. 레지스터의 종류는 IR(Instruction Register), PC(Program Counter), AC(Accumulator) 등이 있다.
컴퓨터 메모리(기억장치)의 종류
데이터를 일시적, 또는 영구적으로 보존하는 장치
크게 주기억장치(RAM, ROM)와 보조기억장치(SSD, HDD)로 나뉜다.
RAM, Random Access Memory
: CPU가 현재 사용 중인 프로그램이나 명령만을 임시로 저장하는 곳이다. RAM은 휘발성 메모리로 전원이 꺼지면 메모리에 저장된 내용들은 모두 사라진다.
- SRAM(Static RAM): CPU 안에 포함되어 캐시 메모리라고도 하며, CPU와 DRAM의 속도 차이를 극복하기 위해 CPU와 DRAM 사이에 존재하는 고속 기억 장치. 전원을 공급하는 한 데이터를 유지한다.
- 캐시 메모리: 레지스터 다음으로 빠른 메모리로 L1, L2, L3 캐시 등 여러 단계로 나뉘어진다. 숫자가 작을수록 용량이 작고 빠르며 숫자가 클 수록 용량이 크고 느리다. 시간적 공간적 지역성을 기반으로 가까운 미래에 접근된 확률이 높은 데이터를 미리 보관한다.
- DRAM(Dynamic RAM): 우리가 흔히 말하는 메인 메모리를 뜻하며, SRAM보다 속도는 느리지만 집적도(=1개의 반도체 칩에 구성되어 있는 소자 수)를 높이기 쉬워 메모리 용량이 크고 SRAM보다 상대적으로 저렴하다. 시간의 흐름에 따라 정보가 소멸되기 때문에 일정 시간마다 재충전해야한다.
ROM(Read Only Memory)
: 기록된 정보를 읽을 수만 있고 쓰거나 수정은 불가능한 메모리다. 컴퓨터의 전원이 끊어져도 내용이 (반)영구적으로 유지되는 비휘발성 메모리다. 일반적으로, 컴퓨터의 입출력을 처리하는 바이오스 등의 변경 가능성이 없는 소프트웨어를 기억시키는 데 이용한다.
- 플래시 메모리:
HDD(Hard Disk Driver)
: 물리적인 디스크를 고속으로 회전시켜 데이터를 저장하는 장치이다.
SDD(Solid State Disk)
: 반도체를 이용하여 데이터를 저장하는 기억장치이다. 물리적으로 데이터를 저장하지 않고 전기적으로 데이터를 저장하기 때문에 HDD보다 속도가 월등히 빠르고 소음도 없다. 또한 전력소모가 적고 소형화가 가능하여 HDD보다 비싸다.
프로세스 상태
- 생성(Create/new): 프로세스가 생성되는 단계
- 준비(Ready): 프로세스가 ready queue 에 들어가 자신의 차례를 기다리고 있는 상태
- 실행(Running): 프로세스가 CPU를 차지하여 실행중인 상태.
- 대기(Waiting): 프로세스가 특정 자원이나 이벤트를 기다리는 상태
- 종료(Exit): 프로세스 실행이 완료되어 자원을 반납한 상태
프로세스 상태 전이
- 준비 -> 실행 (Dispatch) : 프로세스 스케줄러에 의해 결정된 우선순위에 따라 프로세스가 CPU를 점유하게 되는 상태
- 실행 -> 준비 (Time Out) : 프로세스에 할당된 시간을 모두 소비하면, 클럭(clock)이 인터럽트를 발생시켜 제어권을 빼앗는 상태(Preemption, 독점 방지)
- 실행 -> 대기 (Block) : 프로세스가 입출력, 다른 자원을 기다리기 위해 자원을 빼앗기는 상태. 다른 프로세스를 실행상태로 옮겨짐. 만약 프로세스에 입출력이 요청되면 입출력 관리자에게 작업을 맡기고 프로세스는 대기상태에서 기다린다.
- 대기 -> 준비 (Wake Up) : 입출력이 완료되면 입출력 인터럽트가 발생되고 (또는 필요한 자원이 모두 할당된 상태면) 프로세스가 준비 상태로 가서 다시 실행될 준비가 되는 상태
CPU 스케줄링 종류
비선점 스케줄링
- FCFS (First Come First Serve) : 큐에 도착한 순서대로 CPU 할당
실행 시간이 짧은 게 뒤로 가면 평균 대기시간이 길어짐
- SJF (Shortest Job First) : 수행시간이 짧다고 생각하는 작업을 먼저 수행
FCFS 보다 평균 대기 시간 감소, 짧은 작업에 유리
- HRN (Highest Response-ratio Next) : 우선순위를 계산하여 점유 불평등을 보완한 방법(SJF의 단점 보완)
우선순위 = (대기시간 + 실행시간) / (실행시간)
선점 스케줄링
- Priority Scheduling : 정적/동적으로 우선순위를 부여하여 우선순위가 높은 순서대로 처리
우선 순위가 낮은 프로세스가 무한정 기다리는 Starvation 이 생길 수 있음
-> Aging 방법으로 Starvation 문제 해결 가능
- Round Robin : FCFS에 의해 프로세스들이 보내지면 각 프로세스는 동일한 시간의 Time Quantum 만큼 CPU를 할달 받음. 할당 시간(Time Quantum)이 크면 FCFS와 같게 되고, 작으면 문맥 교환 (Context Switching) 잦아져서 오버헤드 증가
* Time Quantum or Time Slice : 실행의 최소 단위 시간
- Multilevel-Queue (다단계 큐) : 작업들이 여러 종류의 그룹으로 나뉘어 여러 개의 큐를 이용하는 기법. 프로세스들이 큐 간 이동하지는 않는다.
- 각 프로세스는 그들의 큐가 있고, 각 큐마다 다른 스케줄링 알고리즘을 갖고있다. 큐들 간 프로세스 실행 순서는, 우선순위가 낮은 큐들이 실행 못하는 걸 방지하고자 각 큐마다 다른 Time Quantum을 설정 해주는 방식 사용
- 우선순위가 높은 큐는 작은 Time Quantum 할당. 우선순위가 낮은 큐는 큰 Time Quantum 할당.
- Multilevel-Feedback-Queue (다단계 피드백 큐) :
- 다단계 큐에서 자신의 Time Quantum을 다 채운 프로세스는 밑으로 내려가고 자신의 Time Quantum을 다 채우지 못한 프로세스는 원래 큐 그대로 유지된다. 즉, 큐 간 이동이 가능하다.
- Time Quantum을 다 채운 프로세스는 CPU burst 프로세스로 판단
- 짧은 작업에 유리, 입출력 위주(Interrupt가 잦은) 작업에 우선권을 줌
- 처리 시간이 짧은 프로세스를 먼저 처리하기 때문에 Turnaround(대기시간+실행시간) 평균 시간을 줄여줌
* 참고 자료:
728x90'CS기초 > 운영체제' 카테고리의 다른 글
교착 상태, 경쟁 조건/상태, 세마포어와 뮤텍스, 메모리 관리 (0) 2022.05.19