21-1학기 운영체제에 대해서 배운 내용들을 상기하고 기록하기 위해 글을 쓰려고 합니다.
Memory Management는 수업시간에 재밌게 들었던 부분이에요!
정리하면서도 기억이 새록새록나서 즐겁네요 ㅎㅎ
여러 프로그램이 동시에 메모리에 적재되어 실행되고, 메모리는 한정된 자원으로 이루어져 있으므로 효율적인 메모리 관리가 필요하다.
memory management의 목적은 가능한 많은 process를 수용하여 CPU의 활용률을 극대화 시키는 것이다.
Relocation이란 프로그램이 메모리상에 어떤 주소위치에 들어가냐에 따라서 프로그램 안에 있는 모든 데이터와 Instruction의 주소를 바꾸는 작업이다.
Protection이란 프로그램이 할당된 메모리영역 이외의 영역에 엑세스하는 것을 막는 것이다.
Sharing이란 process간에 데이터를 공유할 필요가 있을 때는 main memory 공간의 sharing이 필요하다.
메모리를 어떻게 나눌 지 생각해보자.
우선 고정된 사이즈로 나눌 수 있다.
모든 메모리를 동일한 사이즈로 나누면 프로그램의 크기가 다양하므로 메모리가 낭비된다.
동일하지 않은 1,2,4,8 이런 식으로 사이즈를 나눠도 프로그램의 크기는 다양하므로 메모리가 낭비된다.
사이즈로 메모리는 나누지 않고 동적으로 메모리를 할당 할 수도 있다.
이렇게 나누게 되면 공간이 부족하면 메모리를 할당하기 위해 compaction을 하는 작업이 필요한데, 메모리를 하나하나 옮겨서 external fragmentation을 하나로 만들어야 한다.
Dynamic Partitioning에서 external fragmentation 중에서 새로운 process를 어디에 넣어야 할지 알아보자.
1. best-fit : process를 넣었을 때, 공간이 제일 적게 남는 곳을 선택한다.
넣어도 공간이 많이 남을 수 있고, best fit을 찾기위해서 external fragmentation 모두 고려해야하므로 시간 소모가 크다.
2. first-fit : process를 넣을 수 있는 가장 처음 나오는 공간을 선택한다.
공간을 찾는데 시간 소모는 적지만 뒷 쪽 공간을 잘 사용하지 않는다.
3. next-fit : 마지막으로 allocation한 곳의 다음부터 찾는다.
4. worst-fit: 가장 많이 남은 곳에 process를 넣는다.
external fragmentation 모두 고려해야하므로 시간 소모가 크다.
fixed partitioning과 dynamic partitioning의 합친 System으로 memory의 전체 공간이 2의 n승이라고 가정한다.
할당 해야 할 process의 사이즈가 s라고 했을 때 2^(u-1)<s<=2^u라면 2^u만큼의 메모리를 할당한다.
Logical : process의 관점에서 사용하는 주소로 Physical address로 변환하기 위해서 사용하는 주소이다.
Relative : 기준점을 기준으로 주소를 표현할 때 사용하는 주소이다.
Physical : memory안에서 사용되는 실제 주소로, 기억 장치의 주소 레지스터에 적재되는 주소이다.
오른쪽과 같은 process image가 있을 때, program에서부터 0부터 시작해서 data끝까지 이 process의 relative address 지정할 수 있다.
이 프로세스가 메모리에서의 physical address가 3000으로 시작한다면 base register에 3000이라는 값이 담겨 있고, adder에서 physical address로 전환된다.
bounds register에는 이 process의 제일 끝의 physical address가 담겨 있다.
relative address가 0~1000이라면 bounds register에는 4000이라는 값이 담겨 있고 adder에서 나온 값이 bounds register에 담겨 있는 값보다 작은지 comparator에서 확인한다.
memory와 process를 동일한 크기인 page로 나누어 관리한다.
process를 동일한 크기로 나눈 chunk를 page라고 하고 memory를 동일한 크기로 나눈 chunk를 frame이라고 한다.
page가 하나의 frame을 할당 받으면 physical memory에 위치하게 된다.
이 때, frame을 할당 받지 못한 pages는 외부 저장장치(backing store)에 저장된다.
위 사진처럼 page단위로 나눈 process를 Dynamic Partitioning하여 할당한다.
이 때, process별로 page의 위치 정보를 저장하는 page table이 필요하다.
page를 logical address로 표현해보자.
page를 두 부분으로 나눌 수 있는데 하나는 page 번호이고, 다른 하나는 page offset이다.
page 번호는 각 process가 가진 page마다 부여된 번호를 의미하고, page offset은 각 page의 내부 주소를 가리킨다.
page를 사용하면 relative address와 logical address가 같은 것을 알 수 있다.
relative address를 바꾼 것이 아니므로 컴파일 방법을 바꾸지 않아도 된다는 장점이 있다.
process를 의미있는 단위인 segment으로 나눈다.
ex) pcb,code,data,stack
segment는 크기가 모두 같지 않으므로 dynamic partition을 사용한다.
대신 maximum segment length가 있다.
segment를 두 부분으로 나눌 수 있는데 하나는 segment 번호이고, 다른 하나는 sagment offset이다.
segment 번호는 각 process가 가진 segment마다 부여된 번호를 의미하고, segment offset은 각 segment의 내부 주소를 가리킨다.
segment도 page처럼 table을 가지며 sagment table은 length와 base로 이루어져 있다.
length에는 해당 sagment의 길이를 나타낸다.
그러므로 segment offset이 length보다 클 수 없다.
base에는 해당 segment의 실제 위치의 시작주소이다.
그러므로 base값에 offset을 더하면 logical address를 physical address로 변환 할 수 있다.