일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 정렬
- 브루트포스
- 신나는함수실행
- Python
- BF
- 코딩테스트
- Algorithm
- 파이썬
- dfs
- 1일1솔
- Loss
- OS
- backtracking
- 백준
- 머신러닝
- 백트래킹
- ML
- sort
- python3
- 재귀
- 코테
- two pointer
- 재귀함수
- 프로그래머스
- 투포인터
- Virtual Memory
- CS
- Github
- 완전탐색
- 알고리즘
- Today
- Total
목록Virtual Memory (3)
이것저것 공부 기록하기
Segmentation 기법 가상 메모리를 서로 크기가 다른 논리적 단위인 세그먼트(Segment)로 분할 페이징 기법에서는 가상 메모리를 같은 크기의 블럭으로 분할 ex) x86 리얼모드 CS(Code Segment), DS(Data Segment), SS(Stack Segment), ES(Extra Segment)로 세그먼트를 나누어 메모리 접근 세그먼트 가상주소 v = (s,d): s는 세그먼트 번호, d는 블럭 내 세그먼트의 offset(변위) 물리주소 계산방식은 페이징 시스템과 동일 Segmentation과 Paging Process 비교 세그멘테이션은 크기가 다른 segment 단위별로 물리 메모리에 로딩 페이징은 스택이든 힙이든 공유라이브러리든 이런 거 상관없이 그냥 일괄적으로 4KB씩 쪼개..
페이징(paging) 개념 크기가 동일한 페이지로 가상 주소 공간과 이에 매칭하는 물리 주소 공간을 관리 하드웨어 지원이 필요 Intel x86시스템(32bit) CPU에서는 사이즈 단위를 4KB, 2MB, 1GB 지원 리눅스에서는 4KB로 paging 페이지 번호를 기반으로 가상 주소/물리 주소 매핑 정보를 기록/사용 페이징 시스템(paging system) 실질적인 예를 기반으로 페이징 시스템에 대해 알아보자. 프로세스(4GB)의 PCB(Process Control Block)에 Page Table 구조체를 가리키는 주소가 들어있음 Page Table에는 페이지 각각의 번호 별로 가상주소와 그에 해당하는 물리 메모리 주소를 매핑해놓은 정보가 있음 페이지 테이블은 페이지가 엄청 많으니까 당연히 길다. ..
가상 메모리(Virtual Memory System) 배경 실제 각 프로세스마다 충분한 메모리를 할당하기에는 메모리 크기가 한계가 있다. 예를 들어, 리눅스는 하나의 프로세스가 무조건 4GB의 영역을 갖는다. 통상 메모리는 8GB? 16GB? 32GB 정도 되니까 프로세스가 통째로 다 올라가게 되면 프로세스를 각각 2개,3개,4개 정도밖에 실행하지 못하게 된다. 폰노이만 구조 기반이므로, 모든 코드는 메모리에 반드시 있어야 한다. 그 메모리에서 코드를 한 줄, 한 줄 가져와서 CPU가 실행을 한다. 따라서 메모리와 프로세스의 dependency가 크다. 그런데 멀티프로세싱이나 멀티태스킹의 장점은 프로세스를 여러 개 실행시킬 수 있다는 건데... 어떻게 하면 적은 메모리에서 많은 프로세스를 실행시킬 수 있..