R e d A l i e n Click

엄청난 기술을 접하면, 마치 외계인의 기술을 훔친 것과 같다고 말합니다

붉은외계인은 그러한 놀라운 기술을 탐구하고, 기술적인 도전에 맞서는 것을 의미하는 저의 또 다른 이름입니다

서로가 성장할 수 있는 건설적인 토론을 좋아합니다.

article_thumbnail

[붉은외계인] CS - 컴퓨터구조와 작동 원리 4 - 운영체제의 자원 접근 및 할당(CPU 스케줄링, 스와핑, 페이징)

2024. 1. 16.
클릭 시, 이동!

2024.01.16 - [Fundamental/CS\OS] - [붉은외계인] CS\OS - 컴퓨터구조와 작동 원리 3 - 운영체제의 프로세스 관리

 

[붉은외계인] CS\OS - 컴퓨터구조와 작동 원리 3 - 운영체제의 프로세스 관리

운영체제란 무엇인가 운영체제는 프로그램 실행에 필요한 자원을 할당해주고, 프로그램이 올바르게 실행될 수 있도록 도와주는 프로그램 혹은 하드웨어에 직접 접근하고 제어할 수 있는 프로

redalien.tistory.com

해당 게시물은 이전 포스트에서 이어지는 내용이다

이제 운영체제의 핵심 기능 중, 자원 접근 및 할당에 대해서 알아보겠다

 


 

CPU 스케줄링( 프로세스 스케줄링 )

CPU 스케줄링은 운영체제가 프로세스에게 합리적으로 CPU를 배분하는 것을 말한다 
이러한 CPU 스케줄링은 컴퓨터 성능과 직결되는 부분이다
그렇다면 운영체제가 어떻게 CPU를 배분하는지 알아보자

 

운영체제는 프로세스 PCB에 우선 순위를 명시하고, 높은 우선순위 프로세스부터 먼저 처리 한다
( 무조건 높은 우선순위부터 처리하는 것은 아니며, CPU 스케줄링 알고리즘에 따라 달라진다
간단하게 높은 우선순위부터 처리한다고 기억하자 )

이러한 우선순위는 일반적으로, 입출력집중 프로세스가 CPU집중 프로세스보다 높다 
왜냐하면, 입출력집중 프로세스를 먼저 처리하면 대기 상태로 바뀌기 때문에 입출력 작업이 끝날 때 까지
다른 프로세스에 더 집중을 할 수 있기 때문이다

입출력집중 프로세스: 디스크 백업 등 입출력 작업이 많은 프로세스
CPU집중 프로세스: 복잡한 연산 등 CPU 사용량이 많은 프로세스

 

하지만 운영체제가 매 번 PCB를 뒤져보면서, 처리할 프로세스를 찾는것은 비효율적이다
이것을 해결하기 위해 스케줄링 큐를 사용한다

출처 : 혼자 공부하는 컴퓨터구조 + 운영체제

 

스케줄링 큐는 프로세스 스케줄링을 관리하기 위한 자료구조이다

CPU를 쓰고 싶은 프로세스는 해당 프로세스들끼리, 메모리를 쓰고 싶은 프로세스들은 해당 프로세스들끼리
줄을 세우는 것이다 이러한 스케줄링큐는 다양한 종류가 있으나 대표적으로, 준비 큐대기 큐가 있다

준비 큐는 CPU를 사용하려는 프로세스들의 큐이고, 대기 큐는 입출력 작업중인 프로세스들의 큐이다

 

정리하자면, CPU는 PCB에 명시된 우선 순위대로 프로세스를 처리하나 알고리즘에 따라 달라질 수 있다
그리고 운영체제가 PCB를 하나씩 뒤져보며 처리하면 비효율적이니 스케줄링 큐를 통해 효율적으로 처리한다는 것.

 


 

가장 기본적인 메모리 관리 기법: 스와핑

위에서 CPU 자원관리를 알아보았다면 이제는 메모리 자원관리에 대해서 알아볼 것이다

출처: 혼자 공부하는 컴퓨터구조 + 운영체제

 

스와핑은 실행중이지 않은 프로세스를 보조기억장치의 스왑 영역으로 임시 이동시켜 메모리 공간을 확보하고, 
확보한 공간에 새로운 프로세스를 적재하는 메모리 관리 기법이다
스왑 영역에서 메모리로 프로세스를 이동시키는 것을 스왑 인이라고 하고, 반대는 스왑 아웃이라고 한다

여기서 실행중이지 않은 프로세스입출력 작업으로 인해 대기 상태로 변한 프로세스,
오랫동안 실행되지 않은 프로세스가 해당된다

 

스왑 영역 : 스와핑 과정이서 이동되는 프로세스가, 임시저장되는 보조기억장치의 영역
스왑 인 : 스왑 영역에서 메모리로, 프로세스가 이동하는 것
스왑 아웃: 메모리에서 스왑 영역으로, 프로세스가 이동하는 것

 


 

메모리 관리 기법: 연속 메모리 할당

연속 메모리 할당은 운영체제가, 프로세스를 할당할 수 있는 공간에 연속적으로 프로세스를 할당하는 기법이다
이러한 기법은 3가지 종류로 나뉜다

최초 적합 : 운영체제가, 프로세스를 할당할 수 있는 공간을 발견하면 즉시 할당하는 방식이다
최적 적합 : 운영체제가, 빈 공간을 모두 검색한 후, 프로세스를 적재할 수 있는 가장 작은 공간에 적재하는 방식이다
최악 적합 : 운영체제가, 빈 공간을 모두 검색한 후, 프로세스를 적재할 수 있는 가장 큰 공간에 적재하는 방식이다

 

하지만 이러한 연속 메모리 할당의 단점외부 단편화를 발생시킨다는 점이다

출처: 혼자 공부하는 컴퓨터구조 + 운영체제

외부 단편화는 프로세스를 할당할 수 없는 작은 공간으로 인하여, 메모리가 낭비되는 현상을 말한다
위에 그림에서는 총 50MB의 여유 공간이 있으나, 각 30MB, 20 MB 크기의 프로세스만 적재가 가능하다는 것


이러한 외부 단편화는 메모리 압축과, 가상 메모리 기법 중 하나인 페이징을 통해 해결할 수 있다

 


 

외부 단편화 해결 방법: 메모리 압축

출처: 혼자 공부하는 컴퓨터구조 + 운영체제

메모리 압축은 프로세스를 재정렬하여, 작은 빈 공간을 하나의 큰 빈공간으로 합치는 메모리 관리 기법을 말한다

하지만 메모리 압축은 많은 오버헤드가 발생하고, 메모리 압축 과정을 진행하는 동안에는 다른 작업을 할 수 없다는 
단점이 있다

 


 

외부 단편화 해결 방법: 가상 메모리 기법 중 페이징

페이징은 가상 메모리 기법 중에 하나이다 페이징을 알아보기 전에, 먼저 가상 메모리 기법에 대해 알아보자

가상 메모리 기법실행할 프로세스의 일부만 메모리에 적재하여, 실제 물리 메모리 크기보다 더 큰 프로세스를 
적재할 수 있게 하는 기술이다 이러한 기법은 대표적으로 세그멘테이션페이징 기법이 있다
현대 운영체제에서는 페이징 기법이 훨씬 더 많이 사용되니, 페이징을 꼭 기억하자

출처: 혼자 공부하는 컴퓨터구조 + 운영체제

페이징이란 논리 주소 공간을 일정한 크기의 단위인 페이지로 나누고, 물리 주소 공간을 페이지 크기와 동일한 프레임 단위로
나눈 후, 불연속적으로 페이지를 프레임에 할당하는 가상 메모리 기법이다 

이러한 페이징은 외부 단편화를 해결할 수 있으나, 내부 단펴화를 야기할 수 있다

내부 단편화는 페이지 크기보다 작은 프로세스로 인하여, 메모리가 낭비되는 현상을 말한다
위의 그림으로 이해하는 것이 훨씬 와닿을 것이다

 

페이징을 통해 만들어진 페이지 또한 스와핑이 가능하다 이것을 페이징 스와핑이라고 한다
현재 사용되지 않는 페이지를 스왑 영역으로 임시 이동시켜, 메모리 공간을 확보한 후, 새로운 페이지를 적재하는 것이다
이것 또한 스왑 인/아웃과 비슷한 페이지 인페이지 아웃이 존재한다

 

정리히자면, 페이징 기법과 페이징 스와핑을 이용하면, 프로세스 전체를 메모리에 적재할 필요가 없다 
이러한 이유로, 물리 메모리 보다 큰 프로세스를 적재할 수 있는 것이다

 


 

페이징과 페이지 테이블 

위에서 언급하였듯, 페이징은 불연속적으로 페이지를 프레임에 할당하는 가상 메모리 기법이다

하지만 불연속적으로 페이지를 프레임에 할당하면, 어떠한 프레임에 어떤 페이지가 있는지 모르기 때문에
CPU는 순차적인 실행이 어려울 것이다 이것을 해결해주는 것이 바로 페이지 테이블이다

페이지 테이블페이지 번호와 프레임 번호의 맵핑 정보를 저장하는 자료구조이며, 메모리에 저장되어 있다
이러한 페이지 테이블의 시작 주소는 각 PCB의 기록되어 있다 


CPU는 이러한 페이지 테이블을 보고, 페이지와 맵핑된 프레임에 접근하여 순차적으로 실행하면 되는 것이다
하지만 CPU는 페이지 테이블이 어디있는지부터 알아야 할 것이다 
이것은 PTBR을 통해서 페이지 테이블 위치를 알아낸다

 

PTBR은 Page Table Base Register의 약자로 CPU내부의 레지스터이며,
현재 실행중인 프로세스 PCB내부에 있는 페이지 테이블의 시작 주소를 가리키는 레지스터이다
PTBR은 실행중인 프로세스가 바뀔 때마다, 해당 프로세스 PCB 내부의 페이지 테이블 시작 주소로 변경된다

CPU는 이러한 PTBR을 참조하여 페이지 테이블에 접근한 후, 페이지와 맵핑돤 프레임에 접근하는 것이다
하지만 여기서 한 가지 문제가 생기다

메모리에 저장된 페이지 테이블을 참조한 후, 또 다시 물리 메모리의 프레임에 접근하기 때문에
메모리에 총 2번 접근하게된다 이것은 속도 저하를 일으킨다
이것을 해결하기 위한 것이 TLB이다

TLB는 Translation Lookaside Buffer의 약자로, MMU 내부에 위치한 캐시 메모리이다
( MMU는 논리주소를 물리주소로 바꾸어 주는 장치이다 )

그리고 이러한 TLB는 페이지 테이블의 일부를 미리 가져와 저장한다
CPU는 TLB에 먼저 접근하는데, TLB히트가 발생하면 곧바로 물리 메모리 내 프레임에 접근하게 되고,
TLB 미스라면 위에서 언급한 문제인 메모리에 2번 접근하게 되는 것이다

 


 

정리

 

가상 메모리기법은 실행할 프로세스의 일부만 메모리에 적재하여, 물리 메모리 크기보다 큰 프로세스를 실행하게 해주는 기술이다 이러한 가상 메모리 기법은 대표적으로 세그먼테이션과 페이징이 있으나, 현대 운영체제에서는 페이징이 많이 쓰인다

이러한 페이징은 논리 주소 공간을 일정한 크기의 페이지 단위로 나누고, 물리 주소 공간을 페이지 크기와 동일한 프레임 단위로 나눈 후, 페이지를 프레임에 할당하는 가상 메모리 기법이다

페이징을 통해 만들어진 페이지는 페이징 스와핑이 가능하여, 사용하지 않는 페이지는 스왑 영역에 임시 저장하고 
새로운 페이지를 메모리에 적재한다

이러한 페이징 기법과 페이징 스와핑 덕분에, 프로세스 전체를 메모리에 적재할 필요가 없고, 물리 메모리보다 큰 프로세스를
적재할 수 있는 것이다

 

하지만 CPU는 어떤 페이지가 어떤 프레임에 있는지 모르기 때문에 페이지 테이블을 참조하여 프레임에 접근한다

페이지 테이블은 페이지 번호와 프레임 번호의 맵핑 정보를 저장한 자료구조이며, 메모리에 저장되어 있다
그리고 각 PCB에는 페이지 테이블의 시작 번호가 기록되어 있다

CPU는 페이지 테이블을 찾기 위해해, CPU내부에 위치한 PTBR를 참조하여 메모리에 저장된 페이지 테이블에 접근한다 

하지만 이것은 메모리에 2번 접근하기 때문에 접근 속도가 느려질 수 있다
이러한 문제를 해결해 주는 것이 TLB이다

TLB는 CPU 내부, MMU 내부의 위치한 캐시 메모리이며, 페이지 테이블의 내용을 미리 가져와 저장한다
CPU는 페이지 테이블에 접근하기 전에, TLB에 먼저 접근한다 
만약 TLB 히트가 발생하면 바로 프레임에 접근할 수 있고, TLB 미스가 발생하면 메모리에 2번접근하게 되는 것이다