일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- redis
- 자바
- JavaScript
- spring webflux
- 알고리즘
- 백준
- 디자인 패턴
- IT
- Galera Cluster
- Spring
- OS
- Kafka
- 자료구조
- Proxy
- 파이썬
- c언어
- design pattern
- Algorithm
- JPA
- C
- Data Structure
- mongoDB
- MySQL
- MSA
- react
- Java
- 네트워크
- 운영체제
- 컴퓨터구조
- Heap
Archives
- Today
- Total
시냅스
주메모리의 관리 Main Memory 본문
주메모리의 관리, Main Memory
- memory에 Load된 program -> process
- 메모리는 바이트로 이뤄진 주소를 배열로 한다.
- PC(Programcounter) -> 주소 -> 명령어, 필요하면 더 데이터를 더 가져오거나 내보낼 수도 있다.
기본 하드웨어 Basic HardWare
- 메모리
- CPU는 각 처리 코어에 내장된 레지스터와 메인 메모리에만 접근할 수 있다.
- 명령어와 데이터들은 CPU가 접근할 수 있는 레지스터와 메인 메모리에 있어야 한다.
- 캐시
- CPU 코어에 내장된 레지스터에는 CPU가 빠르게 접근할 수 있다.
- 다만 메모리에 접근하는 속도는 상대적으로 느리다.
- CPU와 메모리 사이에 캐시라는 빠른 속도의 메모리를 추가하여 자주 접근하는 데이터를 캐시에 둠으로써 속도 차이 문제를 해결할 수 있다.
- 프로세스의 메모리 구역을 보장하는 방법
- Base register <= process < limit register, 프로세스의 메모리 영역 지정
- 위 구역을 벗어나면 Trap 으로 segmentation fault
주소의 할당 Address Binding
- 프로그램이 실행되기 전 위와 같은 과정을 거치는데, 각 단계를 거치는 동안 메모리 주소들은 여러가지 다른 표현 방식을 가진다.
- 최초 주소는 숫자가 아닌 심볼 형태로 표현된다.
- 컴파일러는 이 심볼 주소를 재배치 가능한 주소로 바인딩하고, 다음에 링커나 로더가 재배치 가능 주소를 절대 주소로 바인딩 시킨다.
- 아래는 시점에 따른 주소의 바인딩에 관한 구분이다.
- 컴파일 시간, compile time
- 프로세스가 메모리에 들어갈 위치를 컴파일 시간에 미리 알고 있다면 컴파일러는 절대 코드 (absolute code)를 생성할 수 있다.
- 그러나 만약 위치가 변경된다면 이 코드는 다시 컴파일 되어야 한다.
- 적재 시간, load time
- 컴파일 시점에 메모리의 어떤 위치에 올라올지 모른다면 컴파일러는 일단 이진 코드를 재배치 가능 코드(realocatable code, 컴파일 시간에 수 없는 경우 재배치 가능한 상대 주소)로 작성한다.
- 재배치 가능 코드는 시작 주소가 변경되면 코드를 다시 적재하기만 하면 된다.
- 수행 시간 excution time
- 수행 도중에 메모리 내 위치가 옮겨질 수 있는 경우
- symbolic address -> 컴파일 -> logical address -> 실행시작 -> physical address
- 정리하면, disk에 binary로 저장 돼 있다가 process가 되면 메모리를 할당한다.
- compiler가 symbolic하게 할당한다.
- 정확히는 Linker, Loder는 Logical address를 physical address로 바꾸는 역할을 한다.
Logical vs Physical address
- 논리 주소 Logical address : cpu가 생성한 address
- 물리 주소 Physical addree : Memory register 에 로딩된 주소
- 논리주소가 물리적 주소와 다르다면 가상 주소라고 한다.
- MMU는 Logical 주소와 Physical 주소가 동일하지 않게 맵핑하는 역할을 한다.
- 재배치 레지스터, realocation register == base register
- 논리 주소가 346, MMU가 14000 이라면 물리 주소는 14346이 된다.
Dynamic Loading
- 메모리 공간을 효율적으로 사용하기 위해 각 루틴을 필요할 때에만 메모리에 올린다.
- 호출하면 재배치 가능 연결 적재기 (relocatable linking loader)에 반영한다.
동적 연결 및 공유 라이브러리 Dynamic Linking & shared Libraries
- DLL : Dynamically Linked Libraries
- 동적 연결, 프로그램이 실행되는 중에 linking
- 프로세스 간에 공유할 수 있다.
- shared library == DLL
Hole
- 메모리를 반납하면 남는 공간
- 위를 해결하기 위해
- 최초 적합 First fit : 가장 첫 공간 할당
- 최적 적합 Best fit : 가장 작은 공간 할당
- 최악 적합 worst fit : 가장 큰 공간 할당
단편화 Fragmentation
- 빈 공간이나 자료가 여러 개의 조각으로 나뉘는 현상
- 내부 단편화 : 4만큼 할당 받았는데 3만 쓸 때
- 외부 단편화 : process 7인데 메모리가 4만 남아있을 때
'운영체제' 카테고리의 다른 글
가상 메모리, Virtual Memory (0) | 2022.05.24 |
---|---|
페이징과 스와핑, Main Memory (0) | 2022.05.20 |
교착상태, Deadlock (0) | 2022.05.15 |
뮤텍스 락, 세마포어, 모니터, 라이브니스, Mutex Locks, Semaphores, monitors, Liveness (0) | 2022.04.28 |
프로세스 동기화 Process Synchronization (0) | 2022.04.28 |
Comments