2022.09.19 - [소소한 CS 지식/면접을 위한 CS 전공지식 노트] - 1-1. 디자인 패턴(1)
2022.09.20 - [소소한 CS 지식/면접을 위한 CS 전공지식 노트] - 1-1. 디자인 패턴(2)
2022.09.20 - [소소한 CS 지식/면접을 위한 CS 전공지식 노트] - 1-2. 프로그래밍 패러다임(함수형,객체지향,절차적프로그래밍)
2022.09.22 - [소소한 CS 지식/면접을 위한 CS 전공지식 노트] - 2-1. 네트워크의 기초(토폴로지&성능분석 명령어)
2022.09.23 - [소소한 CS 지식/면접을 위한 CS 전공지식 노트] - 2-2. TCP/IP 4계층 모델
2022.09.27 - [소소한 CS 지식/면접을 위한 CS 전공지식 노트] - 2-3. 네트워크 기기(스위치 등)/IP주소
2022.10.02 - [소소한 CS 지식/면접을 위한 CS 전공지식 노트] - 2-4.HTTP
2022.10.04 - [소소한 CS 지식/면접을 위한 CS 전공지식 노트] - 3-1. 운영체제의 구조와 역할 및 컴퓨터의 구조
CPU는 '메모리'에 올라와 있는 프로그램의 명령어들을 실행한다.
3-2. 메모리
2-1. 메모리 계층
레지스터 | CPU 안에 있는 작은 메모리, 휘발성,속도 가장 빠름, 기억 용량이 가장 적음 |
캐시 | L1, L2 캐시를 지칭, 휘발성, 속도 빠름, 기억 용량이 적음, L3 캐시도 있음 |
주기억장치(메모리) |
RAM을 지칭. 휘발성, 속도 보통, 기억 용량이 보통 |
하드디스크로부터 일정량의 데이터를 복사해서 임시 저장하고, 이를 필요할 때마다 CPU에 빠르게 전달함 | |
보조기억장치(저장장치) | HDD, SDD를 지칭, 휘발성, 속도 낮음, 기억 용량이 많음 |
- 계층이 있는 이유
경제성 | 지역성 |
윗 계층으로 갈수록 속도가 빨라지고 용량이 적어지며 가격이 비싸진다. | 자주 쓰이는 데이터는 계속 자주 쓰인다. |
아래 계층으로 갈 수록 속도가 느려지고 용량이 많아지며 가격이 싸진다. | 캐싱 계층을 통해 구현한다. |
- ex) 16GB RAM보다 16GB SSD는 훨씬 더 싼 가격에 살 수 있다.
- 이러한 계층 구조는 일상생활에서 경험할 수 있는데 게임을 실행하다 보면 '로딩 중'이라는 메시지가 나오는 것을 볼 수 있다. 이는 하드디스크 또는 인터넷에서 데이터를 읽어 RAM으로 전송하는 과정이 아직 끝나지 않았음을 의미한다.
1. 캐시(cache)
데이터를 미리 복사해 놓는 임시 저장소이자 빠른 장치(CPU)와 느린 장치(DRAM)에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리
- 캐시를 통해 데이터를 접근하는 시간이 오래 걸리는 경우를 해결하고 무언가를 다시 계산하는 시간을 절약할 수 있다.
- 메모리와 CPU 사이의 속도 차이가 크기 때문에 중간에 레지스터 계층을 둬서 속도 차이를 해결한다.
캐싱 계층: 속도 차이를 해결하기 위해 계층과 계층 사이에 있는 계층
캐시 메모리와 보조기억장치(하드디스크) 사이에 있는 주기억장치(RAM)를 보조기억장치의 캐싱 계층이라고 할 수 있다.
지역성의 원리
캐시 계층을 두는 것 말고 캐시를 직접 설정할 때는 자주 사용하는 데이터를 기반으로 설정해야한다.
- 지역성: 자주 사용하는 데이터에 대한 근거가 되는 것
시간 지역성(temporal locality) | 공간 지역성(spatial locality) |
최근 사용한 데이터에 다시 접근하려는 특성 (최근에 참조된 주소의 내용은 곧 다음에 다시 참조되는 특성) |
최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하는 특성 (참조된 주소와 인접한 주소의 내용이 다시 참조되는 특성) |
캐시는 반복으로 사용되는 데이터가 많을수록 높은 효율을 보일 수 있다. | 필요한 데이터가 모여있다면 한 번만 메모리에 접근해도 효율적이고, 흩어져 있다면 캐시미스가 날 확률이 높아진다. |
ex) for 반복문으로 이루어진 코드 안의 변수 i에 계속해서 접근이 이루어진다면? 데이터는 변수 i이고 최근에 사용했기 때문에 계속 접근해서 +1을 연이어 한다. |
ex) 공간을 나타내는 배열 arr의 각 요소들에 i가 할당되며 해당 배열에 연속적으로 접근한다.(앞으로 사용할 데이터들이 가져올 블록 안에 많이 모여있는 것) |
캐시히트와 캐시미스
캐시히트 | 캐시미스 |
캐시에서 원하는 데이터를 찾은 것으로 해당 데이터를 제어장치를 거쳐 가져오는 것 | 캐시에 원하는 데이터가 없어서 주 기억장치(메모리)에서 데이터를 찾아오는 것 |
위치가 가깝고 CPU 내부 버스를 기반으로 작동하기 때문에 빠르다. | 시스템 버스를 기반으로 작동하기 때문에 느리다. |
캐시매핑
캐시가 히트되기 위해 매핑하는 방법으로 CPU의 레지스터와 주 메모리(RAM) 간에 데이터를 주고받을 때 사용한다.
- 레지스터는 주 메모리에 비하면 굉장히 작고, 주 메모리는 굉장히 크기 때문에 작은 레지스터가 캐시 계층으로써 역할을 잘 해주려면 매핑을 어떻게 하느냐가 중요하다.
직접 매핑(directed mapping) | 메모리와 캐시의 주소를 순서대로 매핑하는 방법 (메모리가 1~100이 있고 1~10이 있으면 1:1~10, 2:1~10 형태로 매핑) |
처리가 빠르지만 충돌 발생이 잦는다. | |
연관 매핑(associative mapping) | 순서를 일치시키지 않고 관련 있는 캐시와 메모리를 매핑하는 방법 |
충돌이 적지만 모든 블록을 탐색해야 해서 속도가 느리다. | |
집합 연관 매핑 (set associative mapping) |
직접 매핑과 연관 매핑을 합쳐 놓은 것 |
순서는 일치시키지만 집합을 둬서 저장하며 블록화되어 있기 때문에 검색은 더 효율적이다. | |
ex) 메모리가 1~100이 있고 캐시가 1~10이 있다면 캐시 1~5에는 1~50의 데이터를 무작위로 저장시키는 것 |
웹 브라우저의 캐시
소프트웨어적인 대표적인 캐시로는 웹 브라우저의 작은 저장소 쿠키, 로컬 스토리지, 세션 스토리지가 있다.
사용자의 커스텀한 정보나 인증 모듈 관련 사항들을 웹 브라우저에 저장해서 추후 서버에 요청할 때 자신을 나타내는 아이덴티티나 중복 요청 방지를 위해 사용한다.
쿠키 | 로컬 스토리지 | 세션 스토리지 |
만료기한이 있는 키 - 값 저장소 | 만료기한이 없는 키 - 값 저장소 | 만료기한이 없는 키 - 값 저장소 |
same site 옵션을 strict로 설정하지 않았을 경우 다른 도메인에서 요청했을 때 자동 전송 | 웹 브라우저를 닫아도 유지되고 도메인 단위로 저장, 생성 | 탭 단위로 세션 스토리지를 생성하며,탭을 닫을 때 해당 데이터가 삭제 |
4KB까지 데이터 저장 가능 | 10MB까지 데이터 저장 가능 | 5MB까지 데이터 저장 가능 |
클라이언트 또는 서버에서 만료기한 등을 정할 수 있는데 보통 서버에서 만료기한을 정함 | HTML5를 지원하지 않는 웹 브라우저에서는 사용할 수 없으며 클라이언트에서만 수정 가능 | HTML5를 지원하지 않는 웹 브라우저에서는 사용할 수 없으며 클라이언트에서만 수정 가능 |
쿠키를 설정할 때는 document.cookie로 쿠키를 볼 수 없게 httponly 옵션을 거는 것이 중요 |
데이터베이스의 캐싱 계층
데이터베이스 시스템을 구축할 때도 메인 데이터베이스 위에 레디스(Redis:Remote Dictionary Server) 데이터베이스 계층을 캐싱 계층으로 두어 성능을 향상시키기도 한다.
- 캐시히트: 레디스로부터 데이터를 불러온다.
- 데이터를 레디스에 쓴다.
- 캐시미스: 메인 데이터베이스로부터 데이터를 가져온다.
2-2. 메모리 관리
1. 가상 메모리(virtual memory)
메모리 관리 기법의 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화해 이를 사용하는 사용자들에게 매우 큰 메모리로 보이게 만드는 것(메모리가 실제 메모리보다 많아 보이게 하는 기술)
- ex) 노트북에 8GB 램(메모리)를 사용하는데 12GB 프로그램을 실행하기 위해서는 메모리에 할당시켜야 한다. 하지만 12GB 프로그램의 용량이 램에 비해 크기 때문에 가상 메모리를 사용한다.
- 즉 프로그램이 돌아가기위해 12GB를 모두 넣는게 아니라 필요한 부분들, 사용하지 않는 것은 메모리에 올리지 않고 사용하는 부분들을 쪼개서 메모리에 넣는 것
사용자 프로그램이 물리 메모리보다 커져도 된다. 즉, 메모리 크기의 제약이 자유로워진다. |
각 사용자 프로그램이 더 적은 메모리를 차지해 더 많은 프로그램을 동시에 수행할 수 있다. |
CPU 이용률과 처리율이 높아진다. | 프로그램을 메모리에 올리고 스왑 하는 필요한 입출력 횟수가 줄어든다. |
가상 메모리 파일의 공유를 쉽게 하고 공유 메모리 구현을 가능하게 한다. |
프로세스 생성을 효율적으로 처리할 수 있는 메커니즘을 제공한다. |
가상 주소(virtual address) / 논리 주소(logical address) | 실제(물리) 주소(physical address) |
가상적으로 주어진 주소 | 실제 메모리상에 있는 주소 |
메모리관리장치(MMU)에 의해 실제 주소로 변환되며, 사용자는 실제 주소를 의식할 필요 없이 프로그램을 구축할 수 있게 된다. |
가상 메모리는 가상 주소와 실제 주소가 매핑되어 있고 프로세스의 주소 정보가 들어있는 페이지 테이블로 관리된다. => 이 때 속도 향상을 위해 TLB를 사용한다.
TLB: 메모리와 CPU 사이에 있는 주소 변환을 위한 캐시
- 페이지 테이블에 있는 리스트를 보관
- CPU가 페이지 테이블까지 가지 않도록 해서 속도를 향상시킬 수 있는 캐시 계층
스왑핑(Swapping)
당장 사용하지 않는 영역을 하드디스크로 옮겨 필요할 때 다시 RAM으로 불러와 올리고, 사용하지 않으면 다시 디스크로 내림을 반복해서 RAM을 효과적으로 관리하는 방법
- ex) 가상 메모리에는 존재하지만 실제 메모리인 RAM에는 현재 없는 데이터나 코드에 접근할 경우 페이지 폴트가 발생하는데 이를 방지 하기 위해 스와핑을 한다.
페이지 폴트(Page Fault)
프로세스의 주소 공간(가상 메모리)에는 존재하지만 컴퓨터의 RAM(물리 메모리)에는 없는 데이터에 접근했을 경우 발생하는 것
- 페이지 폴트가 일어나면 CPU 이용률이 낮아진다.
- 이 때 운영체제는 다음 과정으로 해당 데이터를 메모리로 가져와서 마치 페이지 폴트가 전혀 발생하지 않은 것 처럼 프로그램이 작동하게 해준다.
- 페이지 폴트와 그로 인한 스와핑은 다음 과정으로 이루어진다.
페이지 폴트를 해결하는 과정
- CPU는 찾으려는 페이지가 물리 메모리에 없으면 트랩(Page Fault Trap)을 발생해서 운영체제에 알린다.
- 운영체제는 CPU의 동작을 잠시 멈춘다.
- 운영체제는 페이지 테이블을 확인해 가상 메모리에 페이지가 존재하는지 확인해서 없으면 프로세스를 중단하고 현재 물리 메모리에 비어 있는 프레임이 있는지 찾는다. 이 때 비어 있는 프레임이 없다면 페이지 교체 알고리즘을 통해 교체할 페이지를 골라야 한다.
- 만약 물리 메모리에도 없다면 스와핑이 발동된다.
- 비어 있는 프레임이 있다면, 비어 있는 프레임에 해당 페이지를 로드하고, 페이지 테이블을 최신화한다.
- 중단되었던 CPU를 다시 시작한다.(프로세스를 실행한다.)
페이지(page): 가상 메모리를 일정한 크기로 나눈 블록
프레임(frame): 실제(물리) 메모리를 일정한 크기로 나눈 블록
2. 스레싱(Thrashing)
메모리 영역에 접근하게 될 때, 메모리에 페이지 부재(=페이지 폴트(page fault))율이 높은 것으로 컴퓨터의 심각한 성능 저하를 초래한다.
- 스레싱은 메모리에 너무 많은 프로세스가 동시에 올라가게 되면 스와핑이 많이 일어나서 발생하는 것이고, 페이지 폴트가 일어나면 CPU 이용률이 낮아진다.
- CPU 이용률이 낮아지게 되면 운영체제는 "CPU가 한가한가?"라고 생각하여 가용성을 더 높이기 위해 더 많은 프로세스를 메모리에 올리게 된다.
- 이와 같은 악순환이 반복되며 스레싱이 일어나게 된다. (따라서 시스템 처리율은 상당히 낮아지고 페이지 폴트는 늘게 된다.)
- 이를 해결하기 위해서 (1) 메모리를 늘리거나, (2) HDD를 사용한다면 HDD를 SDD로 바꾸는 방법이 있다. 이외에 (3) 운영체제에서 이를 해결할 수 있는 방법은 작업 세트와 PFF가 있다.
- 활발하게 사용되는 페이지 집합을 지원해 줄 만큼 프레임이 충분히 할당 받지 못한 프로세스는 페이지 폴트가 발생하게 된다.
- 이 때, 페이지 교체가 필요하지만 이미 활발히 사용되는 페이지들만으로 이루어져 있어서 어떤 페이지가 교체되던 바로 다시 페이지 교체가 필요하게 된다.
- 결과적으로 바로바로 반복하기에 페이지 폴트가 발생하며, 교체된 페이지는 또 다시 얼마 지나지 않아 읽어올 필요가 생기게 된다. 이렇게 과도한 페이징 작업이 쓰레싱이다.
작업 세트(Working set)
프로세스의 과거 사용 이력인 지역성(locality)을 통해 결정된 페이지 집합을 만들어서 미리 메모리에 로드하는 것
- 미리 메모리에 로드하면 탐색에 드는 비용을 줄일 수 있고 스와핑 또한 줄일 수 있다.
PFF(Page Fault Frequency)
페이지 폴트 빈도를 조절하는 방법(상한선과 하한선을 만드는 방법)
- 상한선에 도달한다면 페이지를 늘리고 하한선에 도달한다면 페이지를 줄이는 것
3. 페이지 교체 알고리즘(Page Replacement Algorithm)
페이지 부재(페이지 폴트)가 발생하면 요청된 페이지를 디스크에서 메모리로 읽어와야 하는데 물리적 메모리에 빈 프레임이 존재하지 않을 때, 메모리에 올라와 있는 페이지 중 하나를 디스크로 쫓아내어 메모리에 빈 공간을 확보하는 작업이 필요하다. => 이 작업을 페이지 교체(page replacement)라고 한다.
페이지 교체를 할 때, 어떠한 프레임에 있는 페이지를 쫓아낼 것인지를 결정하는 알고리즘을 페이지 교체 알고리즘(replacement algorithm)이라고 한다.
- 즉 페이지 교체 알고리즘은 page-fault 발생 비율을 줄이는 것을 목표로 한다.
- 메모리는 한정되어 있어서 스와핑이 많이 일어나는데, 스와핑은 많이 일어나지 않도록 설계되어야 하며, 이는 페이지 교체 알고리즘을 기반으로 스와핑이 일어난다.
오프라인 알고리즘(Offline algorithm) / OPT(Optimal) 알고리즘
앞으로 가장 오랫동안 사용되지 않을 페이지를 교체하는 알고리즘, 가장 좋다.
- 미래에 사용될 프로세스를 알 방법이 없기에 사용할 수 없는 알고리즘
- 다른 알고리즘과의 성능 비교에 대한 기준이 된다.
FIFO(First In First Out)
가장 먼저 온 페이지를 교체하는 알고리즘 (페이지 교체시 물리적 메모리에 가장 먼저 올라온 페이지를 우선적으로 내쫓는다.)
- 물리적 메모리에 들어온 순서대로 내쫓을 대상을 선정하기때문에 비효율적인 상황이 발생할 수 있다.
- 구현은 간단하지만 성능은 좋지 않다.
- 프레임의 개수가 많아지면 page-fault가 줄어들어야 하는데 그렇지 않을 수 있다.
- 들어온 시간을 저장하거나 올라온 순서를 큐를 이용해 저장할 수 있다.
LRU(Least Recently Used)
가장 오랫동안 사용하지 않은 페이지를 교체하는 알고리즘으로 많은 운영체제가 택한다.
- 최적 알고리즘과 비슷한 효과를 낼 수 있고, 성능이 좋은 편이다.
- '오래된'것을 파악하기 위해 각 페이지마다 계수기(Counter), 스택같은 별도의 하드웨어가 필요한 문제점이 있다.
- 프로세스가 주기억장치에 접근할 때마다 참조된 페이지 시간을 기록해야 해서 막대한 오버헤드가 발생한다.
- 이중 연결 리스트와 해시 테이블을 이용해 구현한다.
이중 연결 리스트 | 해시 테이블 |
한정된 메모리를 표현 | 이중 연결 리스트에서 빠르게 찾을 수 있도록 하기 위해 사용 |
1) NUR(Not Used Recently)
LRU에서 발전한 알고리즘으로 최근에 사용하지 않은 페이지를 교체하는 알고리즘, clock 알고리즘이라고 한다.
- 최근 사용여부를 파악하기 위해 각 페이지마다 두 개의 비트를 둠: 참조 비트(Reference Bit), 변형 비트(Modified Bit))
- 시계 방향으로 돌면서 0을 찾고 0을 찾은 순간 해당 프로세스를 교체하고, 해당 부분을 1로 바꾸는 알고리즘
0은 참조되지 않음을 의미 | 1은 최근에 참조됨을 의미 |
참조 비트가 0 이면 호출되지 않음 | 참조 비트가 1이면 호출됨을 나타냄 |
변형 비트가 0 이면 페이지 내용이 변경되지 않음 | 변형 비트가 1이면 페이지 내용이 변경됨 |
LFU(Least Frequently Used)
가장 참조 횟수가 낮은 페이지를 교체하는 알고리즘, 즉 많이 사용되지 않은 것을 교체하는 것
- 교체 대상이 여러 개라면 가장 오랫동안 사용하지 않은 페이지를 교체한다.
- 단점: 가장 최근에 불러온 페이지가 교체될 수 있고, 구현이 더 복잡하다. 덤으로 막대한 오버헤드.
4. 메모리 할당
메모리에 프로그램을 할당할 때는 시작 메모리 위치, 메모리의 할당 크기를 기반으로 할당한다.
연속 할당
메모리에 '연속적'으로 공간을 할당하는 것
즉 프로세스를 메모리에 올릴 때 주소 공간을 여러개로 분할하지 않고 물리적 메모리의 한 곳에 연속적으로 적재한다.
1) 고정분할 방식(fixed partition allocation)
메모리를 미리 나누어 관리하는 방식
- 물리적 메모리를 주어진 개수만큼의 영구적인 분할로 미리 나누어두고 각 분할에 하나의 프로세스를 적재해 실행시킬 수 있게 하는 것
- 분할의 크기는 모두 동일하게 할 수도 있고 서로 다르게 할 수도 있다.
- 메모리에 올릴 수 있는 프로그램 수가 고정되어 있고(1), 수행 가능한 프로그램의 최대 크기 또한 제한되어서(2), 융통성이 없다.
- 외부 단편화와 내부 단편화가 발생할 수 있다.
외부 단편화(external fragmentation) | 내부 단편화(internal fragmentation) |
메모리를 나눈 크기보다 프로그램이 커서 들어가지 못하는 공간이 많이 발생하는 현상 | 메모리를 나눈 크기보다 프로그램이 작아서 해당 분할에 프로그램을 적재하고 남는 현상 |
메모리 공간은 비어있지만 프로세스를 적재시키지 못해서 낭비됨 | 하나의 분할 공간에는 하나의 프로세스만 들어가기 때문에 다른 프로그램이 들어갈 수 없어서 메모리가 낭비됨 |
|
2) 가변분할 방식(variable partition allocation)
매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용하는 방식
- 프로그램의 크기에 맞게 할당하기 때문에 내부단편화는 발생하지 않는다.
- 동적 메모리 할당 문제: 새로운 프로그램을 적재시키기 위해서 가용공간 중 어떤 위치에 올릴 것인지 결정하는 문제
동적 메모리 할당 문제를 해결하는 대표적인 방법 | |
최초 적합(first fit) | 위쪽이나 아래쪽부터 시작해서 홀을 찾으면 바로 할당한다. |
메모리에 존재하는 가용 공간을 순서대로 찾아보면서 가용 공간이 프로그램 크기보다 작으면 건너뛰고 그렇지 않은 가용 공간이 최초로 발견되면 그 공간에 프로그램을 할당한다. | |
할당을 하면 다른 공간은 찾을 필요 없기에 시간적인 측면에서 효율적이다. | |
최적 적합(best fit) |
프로세스의 크기 이상인 공간 중 가장 작은 홀부터 할당한다. |
가용공간 리스트를 탐색해서 프로그램을 넣을 수 있는 공간 중에 가장 작은 공간에 적재시키는 것 | |
모든 가용공간 리스트를 탐색해야 해서 시간적 오버헤드가 발생한다. | |
프로그램 크기와 가장 딱맞는 공간을 찾아서 넣기 때문에 공간적인 측면에서 효율적이다. | |
최악 적합(worst fit) | 프로세스의 크기와 가장 많이 차이 나는 홀에 할당한다. |
최적적합 방법과 마찬가지로 모든 가용공간 리스트를 탐색해야 하는 오버헤드가 발생한다. |
홀(hole): 할당할 수 있는 비어 있는 메모리 공간
메모리 컴팩션(Memory Compaction): 가변분할 방식에서 발생하는 외부조각 문제를 해결하기 위한 방법
- 프로세스가 종료된 자리에 생겨난 가용공간을 없애기 위해 적재된 프로세스들을 한쪽으로 몰고 가용공간들을 다른 한쪽으로 모아서 하나의 큰 가용공간으로 만든다.
- 현재 수행중인 프로세스의 메모리상의 위치를 상당 부분 이동시켜야 해서 비용이 매우 많이 드는 작업이다.
불연속 할당
메모리에 '연속적'으로 할당하지 않는 것(현대의 운영체제가 쓰는 방법)
1) 페이징(Paging)
동일한 크기의 페이지 단위로 나누어 메모리의 서로 다른 위치에 프로세스를 할당하는 것
메모리를 동일한 크기의 페이지(보통 4KB)로 나누고 프로그램마다 페이지 테이블을 두어 이를 통해 메모리에 프로그램을 할당한다.
즉 메모리 공간에 페이지 크기 만큼 잘라서 넣을 수 있는 물리메모리 공간의 틀(프레임)으로 분할시킨다.
- 홀의 크기가 균일하지 않은 문제가 없어지지만 주소 변환이 복잡해진다.
- 디스크에서 들고오는 페이지들의 크기가 프레임보다 큰 경우가 없기 때문에 메모리에 못 들어가는 경우는 없다.(메모리가 꽉찬 경우가 아닐 때) 즉, 외부 단편화가 발생하지 않는다.
- 프로세스의 주소 공간 중 제일 마지막에 위치한 페이지에서는 내부단편화가 발생할 가능성이 있다.
2) 세그멘테이션(Segmentation)
페이지 단위가 아닌 의미 단위인 세그먼트(Segment)로 나누는 방식, 즉 프로세스를 논리적 내용을 기반으로 나눠서 메모리에 배치하는 것
논리적인 영역, 집합 = 세그 먼트 / 각각의 세그먼트들은 동일한 크기를 갖지 않는다.
프로세스는 코드, 데이터, 스택, 힙 등으로 이루어지는데, 코드와 데이터 등을 기반으로 나눌 수도 있고 함수 단위로 나눌 수도 있다.
- 공유와 보안 측면에서 좋고 홀 크기가 균일하지 않은 문제가 발생한다.
- 세그먼트를 메모리에 할당할 때는 페이지를 할당하는 것과 동일한데 이 때 segment table을 활용해서 메모리에 접근하게 된다.
segment table: 세그먼트의 번호와 시작 주소, 세그먼트 크기를 엔트리로 갖게 된다.
- 세그먼트 0번의 위치는 세그먼트 번호 0을 인덱스로 갖는 base 정보로 찾는다.
- 세그먼트 0은 1400에 주소에 위치하고 limit은 1000이다. 즉 1400번지부터 크기가 1000만큼 세그먼트 0번이 할당되어있다.
- 각각의 세그먼트들은 메모리를 사용하는 공간이 다다르고, 메모리에 계속해서 세그먼트가 들어오고 나오고를 반복하며 세그먼트들 사이에는 작은 빈틈들이 생길 수 있다.
- 그렇게 되면 빈틈보다 큰 세그먼트가 메모리에 들어오면 할당할 수 없다. 즉 외부 단편화가 발생할 수 있다.
3) 페이지드 세그멘테이션(Paged Segmentation)
공유나 보안을 의미 단위의 세그먼트로 나누고, 물리적 메모리는 페이지로 나누는 것 즉, 세그먼트를 페이징 기법으로 나는 것
- 페이징 기법을 활용해서 외부단편화는 사라졌지만 세그먼트와 페이지가 동시에 존재하기 때문에 주소 변환을 두 번해야 한다.
- 즉, CPU에서 세그먼트 테이블에서 주소 변환을 하고, 그 다음 페이지 테이블에서 또 주소변환을 해야 한다.
https://velog.io/@oneul1213/CS-3%EC%A3%BC%EC%B0%A8-%EB%A9%94%EB%AA%A8%EB%A6%AC
https://jwprogramming.tistory.com/56
https://baebalja.tistory.com/416
https://baebalja.tistory.com/428
https://code-lab1.tistory.com/60
https://code-lab1.tistory.com/59
'cs > 면접을 위한 CS 전공지식 노트' 카테고리의 다른 글
3-3. 프로세스와 스레드(2): 멀티프로세싱 (0) | 2022.10.14 |
---|---|
3-3. 프로세스와 스레드(1): 프로세스의 컴파일과정, 상태, 메모리 구조, PCB (0) | 2022.10.10 |
3-1. 운영체제의 구조와 역할 및 컴퓨터의 구조 (0) | 2022.10.04 |
2-4.HTTP (0) | 2022.10.02 |
2-3. 네트워크 기기(스위치 등)/IP주소 (0) | 2022.09.27 |