컴퓨터공학/Operating System

[9-1] Main Memory

Pyxis 2024. 11. 14. 17:17

[ Main Memory ]

 

Process는 실행중인 program을 일컫는다.
→ 다르게 말하면 main memory에 유지되고 있는 instruction들의 집합
 
[ Memory ]
a large array of bytes로 구성되어 있고, 각각 주소를 가짐
CPU는 program counter를 이용해서 memory로부터 instruction을 fetch해오고, instruction 또한 memory에 load와 store를 함으로써 access함.
 
[ Memory Space ]
각 process들이 separate memory space를 가지도록 해야 함.
 
Protection of memory space
메모리내에서 process가 다른 process의 address를 침범했는지 확인하기 위해서, base register와 limit register를 통해 base와 base + limit내에 있는지 판단, 벗어난다면 운영체제에게 illegal addressing error를 알리기 위해 trap을 발생시킴. 이걸 Segmentation Fault
→ 이것은 모든 address를 base, limit register로 user mode에서 비교해야하기 때문에  하드웨어로 구성해야 함
 
[ Address Binding ]
근데 이 address는 어떻게 binding할 것 인가?
source에 있는 address들은 일반적으로 Symbolic이다. (int A와 같은 프로그래머가 이해하기 쉬운 이름을 주소로 사용하는 방법)
그렇기 때문에 A라는 symbolic address는 실제 어느 메모리 주소에  있을지는 컴파일러가 지정해줘야 함
컴파일러가 만들어 놓은 exe 파일도 결국에는 binary executable 파일로 disk에 저장되어 있음
실행하기 위해, 메모리에 프로그램을 가져와야 한다.
그러고나서 운영체제의 커널이 어느 주소에 실행되게할지 결정하므로 매 번 다르다.
 
컴파일러는 보통 symbolic address를 "relocatable"  address로 bind한다.
그 다음 Linker나 Loader가 relocatable 주소를 absolute address로 차례대로 bind한다.
 
1) Symbolic address
가장 high-level의 주소
변수명 int A; 와 같은 것
 
2) Logical address
CPU에서 인식하는 주소 체계
virtual, relocatable address라고도 함
 
3) Physical address
실제 물리적인 메모리 위치에 해당하는 주소
absolute address라고도 함
 
 
Logical address와 Physical address는 서로 직접적으로 관계가 없어야 함.
 
[ MMU (Memory Management Unit) ]
logical address를 physical address로 매핑해주는 hardware device.
 
[ CPU ] → logical address → [ MMU ] → physical address → [ Physical Memory ]
 
relocation register : MMU에서의 base register, 이걸 기반으로 변환
346 → 14000 → 14346
 
[ Dynamic Loading ]
프로그램과 데이터의 전체를 physical memory에 로딩해야 할까?
→ 메모리 주소 공간을 효율적으로 사용하기 위해서 사용되지 않는 routine을 로딩하지 않고, 필요할 때만 로딩
relocatable linking loader가 필요한 routine을 호출할 때 address table에 반영
 
[ Contiguous Memory Allocation ]
main memory를 가능한 효율적으로 할당해야한다.
Contiguous memory allocation은 통째로 올리는 것.
 
Variable-Partition scheme : 각 partition이 정확히 하나의 process를 포함하고 있는데, 다양한 size의 partition들이 메모리에 할당되어 있음.
→ 구조상 사이사이 빈 공간에 hole이 생기게 됨.
 
free holes들의 리스트중 에서 어디에 할당할 것인가?
First-Fit : 첫번째
Best-Fit : priority-queue
Worst-Fit : 가장 큰 것
→  Contiguous는 이제 안쓰는 방식
 
[ Fragmentation ]
- external fragmentation
작은 hole들이 매우많이 있게 된다면, memory가 fragmented, 단편화된다.
총 남아있는 memory space는 여유있을 수 있지만, 실제로 연속적이지 않고 흩어져 있으므로 사용할 수 없게 됨.
- internal fragmentation
process에 할당된 memory는 실제로 사용되는 memory 크기보다 조금 더 크기 때문에, 사용되지 않는 부분은 내부적으로 단편화가 생기게 된다.
 
나중에 배울 Paging은 internal fragmentation이 생기고, Contiguous Memory Allocation을 사용하면 external fragmentation이 발생하게 된다.
 
[ Segmentation ]
symbol table, stack, heap, subroutine, main program 등의 단위로 logical address내에 존재하는 것들을 전부 쪼개서 메모리에 올리는 것.
→ Segment 단위로 나누는 것
variable size이므로 Contiguous에 비해 external fragmentation 문제는 더욱 심각해짐.
 
 
Paging을 이해하기 위한 예전 기법부터 순차적인 이해이므로
나중에 다시 언급될 수 있는 MMU, Contiguous Memory Allocation, Fragmentation 등을 위주로 이해하자

'컴퓨터공학 > Operating System' 카테고리의 다른 글

[10-1] Virtual Memory : Demand Paging  (0) 2024.11.14
[9-2] Paging and Swapping  (0) 2024.11.14
[8-2] Deadlocks - 2  (0) 2024.11.14
[8-1] Deadlocks - 1  (1) 2024.11.14
[7] Classic Problems of Synchronization  (0) 2024.11.14