Uniprogramming system
main memory는 OS(resident monitor, kernel)를 위한 부분과
Program을 위한 부분 2가지로 나눠짐.
User part는 적절하게 나뉘어져 여러 process를 처리할 수 있어야하며, 동적으로 memory management에 의해 일어남.
메모리 관리 방법
Frame : 메인 메모리의 정적인 블록.
Paging : secondary memory의 정적인 길이의 블록 사용
Segmentation : 동적인 길이의 블록 사용
Memory Partitioning
Memory Management는 프로세스를 메인 메모리로 옮겨 processor에서 실행
vistual memory를 포함하며, segmentation과 paging에 의해서 일어남
반대로 Partitioning은 Virtual memory를 포함하지 않음
메모리 관리 요구사항
Relocation(주소 변경) : swap되며 다른 메모리에 할당될 때 등에서 사용 혹은 프로그램 시작주소 변경이 일어날 때
Protection(다른 프로그램 접근 불가) : HW를 사용해 진행
Sharing(Thread가 예시, 자원 공유) : 위와 마찬가지로 SW만으로는 불가능
logical organization(논리적 관리) : segment를 활용해 프로그램을 관리
Physical organization(어떻게 나눌지 물리적 관리) : 물리적인 기억장치를 관리 - OS에서 진행
Memory Partitioning
메모리를 여러 영역으로 나누어 관리
같은 size의 고정 크기로 나눔=> 큰 프로그램 실행 불가, 비효율적, Internal Fragmentation 발생
모든 partition이 full 상태이지만 아무 process도 Run or Ready가 아닐 경우 => Swap out
다른 크기로 나누면 => small job은 마찬가지로 낭비가 일어날 수 있음, acative될 수 있는 Process를 나눌 때부터 정하므로 사용이 어려움
Dynamic Partitioning
동적인 크기의 영역으로 나누어 관리
External Fragmentation(자투리)가 많아지면 memory 효율 낮아짐 => shift 필요 => 시간 소요
memory는 CPU보다 느리므로 시간이 크게 소요됨
external fragmentation 해결 기술 필요
유지하기 어렵고, 압축되며 과부하가 생길 수 있음
메모리 할당 방법
- Best-fit : 가장 비슷한 크기에 할당
- First-fit : 시작점에서 가까운 곳에 할당
- Next-fit : 이전 지점과 가까운 곳에 할당
Buddy System
Fixed와 Dynamic scheme의 합성, 단일 블록처럼 공간할당이 이루어짐

Tree로 표현 가능
Address
Logical : 메모리 위치를 현재 data가 메모리에 할당 된 것과 독립적으로 reference해줌
Relative : 이미 알려진 point를 기준으로 알려줌
Physical or Absolute : main 메모리의 실제 주소
Relocation
Relative address를 Base Register(stack의 시작점)과 비교해 절대 주소를 알아냄
Comparator에서 이를 Bounds Register와 비교하여 Overflow가 발생하는지 혹은 할당할지 정함
Paging
상대적으로 작은 고정된 덩어리로 메모리를 나눔
Process 또한 page로 나누어짐
Page는 Process의 덩어리, Frame은 메모리의 사용 가능한 덩어리 라는 차이가 있음
Page Table
OS가 각 process에 대한 page Table 관리, Processor가 process를 실행하기 위해서 접근 필요
각 페이지에 대한 frame location을 기억, Processor가 physical address 생성하는데 사용


Processor는 6bit의 page number와 10bit의 offset으로 physical address를 구함
Segmentation
프로그램은 여러 segment들로 나눠질 수 있음, segment는 dynamic하며 max length가 있음
Addressing은 segment number(4bit)와 offset(12bit)을 통해 구함(Base(16bit) + offset)
Dynamic Partitioning과 유사함
internal fragmentation을 제거할 수 있음

Security Issues
만약 어떤 process가 memory를 공유하지 않으면 다른 process가 접근이 불가능해짐
반대로 공유한다면 OS는 접근할 수 있는 process를 잘 관리하는 것이 필요함
Buffer Overflow Attacks
Security 위험은 메모리 관리와 연관되어 있음.
Buffer overrun이라고도 불리며, 고정된 사이즈의 buffer 너머의 data를 저장하려고 시도하면 발생한다.
이를 보호하기 위해서는 감지하고 중단할 필요가 있다.
Compile-time에서의 방지
- compile-time Defence : 새로운 프로그램에서의 attack을 저항하기 위해 program을 강화
- Run-time Defenceattack을 찾아 중단하는
'운영체제' 카테고리의 다른 글
| CH8 - 2 (1) | 2023.06.08 |
|---|---|
| CH8 - 1 (0) | 2023.06.08 |
| CH6. Concurrency-2 (0) | 2023.04.24 |
| CH5. Concurrency (1) | 2023.04.24 |
| CH4. Threads (0) | 2023.04.24 |