-
Chapter 9: Main Memoryos 2020. 11. 4. 20:39
Background
- Memory로 이동한 프로그램 -> 프로세스
- 하나의 프로그램이 여러 개의 프로세스를 만들 수 있다
- CPU에 직접적으로 전송하는 것은 memory이다.
Base registers: 시작 주소
Limit registers : 프로세스의 용량을 나타낸다.
Address Binding
CPU에 의해서 발생되는 address하고, physical address하고 다르다.
-> 이것을 어떻게 일치시켜야 한다. -> 이것을 Address Binding이다.
왜 그런 가?
CPU에서 발생하는 address는 시작이 0000부터 시작한다.
-> 찾아가려는 코드는 0부터 얼마만큼 떨어져 있는 지 표시하는 것이 실제 메모리 주소이다 -> 다시 입력 exe) 300040
-> CPU는 실제 메모리 주소를 모른다. 그래서 주소 시작을 0000부터 시작한다.
ex) CPU는 14만큼 떨어져 있다고 생각한다. 실제 메모리는 74014만큼 떨어져 있다.
Binding of Instructions and Data to Memory
Compile 할 때 Address Binding
-> 미리 메모리 위치를 먼저 안다 하지만 이런 경우는 거이 없다
Load time(메모리에 프로세스를 올리는 것)
-> 흔하지 않는다
-> 로드 할 때 변화가 없다
Execution time(수행할 때)
프로세스가 항상 같은 위치에 있지 않는다.
-> 프로그램이 종료, 실행을 하면서 위치가 계속해서 변한다.
-> 일반적으로 이 때 address Binding이 일어난다.
Multistep Processing of a User Program
Source code -> 원시프로그램
컴파일을 하는 이유-> 우리가 쓰는 c언어는 하이 레벨 언어이다.
하지만 컴퓨터는 기계어를 이해 할 수 있다.
컴파일을 통해서 c언어를 기계어로 바꾼다.
Ex) 원시프로그램 test.c -> 목적프로그램 test.obj(object) -> 실행프로그램 test.exe
Link: 연결해준다. -> 다시 보기
Load는 파일을 올리는 것이다.
Link를 해야 라이브러리안에 있는 함수를 사용할 수 있다.
Logical, Physical Address
Logical Address
-> CPU에 의해서 생기는 address
Physical Address
-> 메모리상에 있는 실질 적인 address
Memory-Management Unit (MMU)
MMU는 하드웨어이다.
Address binding을 해준다.
Base register을 relocation registe고 부르기도 한다.
시작 주소에다가 relocation register을 더해주면 피지컬 주소가 나온다.
Dynamic Linking
Dynamic 동적
Static 정적
링크를 동적인 상태로 한다.
그렇지 않으면, 해주지 않는다.
Swapping
Swapping
두개를 서로 교환해주는 것
Backing store(디스크라고 생각)
Roll out, roll in (Swap out과 swap in)
Backing store 보조 메모리
Swap out과 swap in을 하는 것을 swapping이라고 한다
Context Switch Time including Swapping
Swapping을 자주한다는 것은 -> 시간이 걸린다.
Ex) 100MB process swapping to hard disk with transfer rate of 50MB/sec
Swap out하면 2초가 걸린다.(in도 그렇다)
Swapping을 하는 데, 4초가 걸린다.
-> swapping을 하는데, 시간이 많이 걸린다.
-> 이작업은 IO작업이다. 디스크에 다시 옮기고, 메모리로 다시 옮긴다.
어떻게 하면 이 작업을 적게 할 수 있는가?
-> 어떤 프로세스를 빼내는 것에 따라서 시간이 다르게 된다. -> 가장 안 쓸 프로세스를 나중에 하는 것이 좋다
Swapping on Mobile Systems
메모리가 작다
flash 메모리를 사용한다.
일반 적인 컴퓨터보다 성능이 낮다.
IOS도 사이즈가 작다
Android도 작다
Contiguous Allocation
Contiguous Allocation(연속해서 할당한다.)
2개의 파트로 나눠진다.
OS
User processes
user processes를 보호하기 위해서
Limit register는 physical addresses만큼의 크기를 가진다.’
Multiple-partition allocation
파트를 여러 개로 만든다.
Degree of multiprogramming -> 메모리 상에 있는 프로세스의 개수
1. OS를 제외한 Degree of multiprogramming는 3
2. 2 프로세스8이 끝내서, 나갔다.
3. 3 프로세스9가 들어왔다
4. 4 프로세스10이 들어왔다.
OS가 메모리를 관리해주기 위해서 필요한 정보
1. 할당된 메모리가 어는 위치에 있는 알 수 있는 정보
2. Hole의 대한 정보도 필요하다. 어디가 비어 있는가
Dynamic Storage-Allocation Problem
First-fit: 가장 먼저 hole중에서 프로세스보다 큰 위치에 들어간다.
Best-fit: hole들을 정렬해서, 가장 작은 것부터 가장 큰 것을 그 프로세스가 들어갈 수 있는 hole중에서 가장 작은 데 들어간다.
Worst-fit: 가장 큰 hole에 들어간다.
Best와 worst는 정렬이 필요하다
First는 정렬이 할 필요 없다 -> 빠르다
Worst-fit이 존재하는 이유?
Fit을 하고 다음 남은 부분을 분할해서 나중에 할당하는데 사용가능 하다
Worst는 제일 큰 것을 할당해서, 필요 없는 부분을 낭비없이 분할 할 수 있다.
First나 best는 너무 작아서 사용할 수 없는 부분으로 남게 될 가능성이 있다.
First, best이 메모리 활용도와 속도가 worst보다 좋다
Fragmentation(남은 공간)
- External Fragmentation
- 프로세스들이 메모리상에 있을 때, 빈 공간(hole)
- Internal Fragmentation
- 각 프로세스한테, 주어진 크기가 있다. 주어진 크기 내에서 비어 있는 공간
compaction
비어 있는 공간을 합친다
Ex) 30 26 10 -> 66으로 바꾼다.
-> 공간의 활용도를 높일 수 있다.
하지만 프로세스들의 위치를 바꿔야한다 -> I/O작업이 필요하다. 시간이 많이 걸린다.
이동하는 데이터의 크기에 따라서, 움직이는 I/O작업이 달라진다
Segmentation(조각)
하나의 프로세스를 여러 개의 조각으로 나눈다.
main program
procedure
function
method
object
local variables,
global variables
common block
stack
symbol table
Arrays
-> 하나의 프로세스가 된다
User’s View of a Program
Logical View of Segmentation
로직에서 피지컬 로 이동하는 것을 생각한다
Segmentation Architecture
Logical address는 2가지의 형태로 나눠진다.
<segment-number, offset>
- segment-number: 메모리의 시작 주소
- Offset: segment-number부터 얼마 만큼 떨어져 있는 가를 나타내는 값
Segment table: 메모리에 있다(배열)
- Base: Segment의 시작 주소
- Limit: 그 Segment의 크기를 나타낸다.
Segment table을 찾아야 한다
Segment-table base register (STBR): Segment-table이 어디 있는지 알 수 있는 위치를 나타낸다.
Segment-table length register (STLR) : 그 Segment가 몇 개 있는가를 나타낸다
Segment number가 < STLR 보다 작아야한다
-> STLR보다 크면, 찾는 범위를 넘어가기 때문이다.
Segmentation Hardware
s: segment number
d: segment Offset
Paging
frames: physical memory 의 크기를 일정한 크기로 나눈다.
Pages: logical memory의 크기를 일정한 크기로 나눈다
다시 보기
Paging다시 확인
각각의 Pages들이 몇 번
다시 확인
N개의 프로세스가 필요하면, n개의 프레임이 필요하다
Page table 메모리 상에 있다.
Page table에 찾아야 한다. 찾을 수 있다.
Internal fragmentation발생 할 수 있다
Address Translation Scheme
Page offset: page시작 부터 얼마나 떨어져 있는가 다시
Page number:
2n까지 커버 할 수 있다.
-> 비트는 한 개 당 0과 1이다.
Page number: max 2^(m-n)
logical address space 2m
page size 2n
다시보기
Internal fragmentation
Best: 0
Worst: page size – 1
Page의 크기가 줄면
페이지테이블의 크기가 커져요
Paging Hardware
Paging Model of Logical and Physical Memory
Free Frames
Implementation of Page Table
Page table을 찾아야 한다
Page-table base register (PTBR) : 메모리 상에서 시작하는 주소값을 가지고 있다
Page-table length register (PTLR) : 크기를 나타낸다.
몇 번 메모리에 접근 해야 한가?
Total 2번 접근한다
two memory access
-> 시간이 많이 걸린다
보안하는 것
associative memory
translation look-aside buffers (TLBs)
Paging Hardware With TLB
한번에 찾아간다
메모리의 page table의 일부만 가진다
하지만 메모리에 있지 않는다. -> 메모리 보다 빠르다
translation look-aside buffers
Associative Memory
-> 메모리 access가 1번이다
-> 하지만 miss를 하면 TLB access + 2*memory access이 필요하다
hit ratio: hit를 하는 비율 -> 99 나온다.
Shared Pages
Shared code(shared Pages)(공유)
공간을 아껴 주기 위해서 같이 사용한다 -. 다시하기
각 프로세스 마다 사용하는 데이터 -> private
Logical address space: 32-bit -> 가상 메모리의 크기
Page table은 2^32 이다.
Hierarchical Page Tables
Logical address table을 여러 table로 나눈다
Two-Level Page-Table Scheme
Page table size : 1000
100개씩 쪼갠다
메모리의 공간을 활용이 높다
단점
1.메모리 접근을 3번 해야 한다 -> 느리다.
2. Outer page table의 공간이 더 필요하다.
Address-Translation Scheme
P1으로 outer page table을 찾아간다
2번째 page table을 찾아간다.
Hashed Page Table
Hash를 사용하는 것이다
Hash table은 크기가 작다
P -> hash function에 넣는다
계산을 한다
-> 그러면 인덱스 값이 나온다
같은 인덱스 값이 나올 수 있다 -> 충돌-> 링크리스트로 연결한다
Inverted Page Table Architecture
Inverted (거꾸로)
모든 프로세스가 page table을 사용한다
-> 공간 절약이 된다.
page table안에는
실질적인 메모리의 상에서의 프레임의 개수가 있다.
프레임 0에는 어떤 프로세스가 들어가 있다.
Pid: 프로세스의 id
-> 찾는데 시간이 많이 걸린다.
'os' 카테고리의 다른 글
Chapter 10: Virtual Memory (0) 2020.11.28 Chapter 8: Deadlocks (0) 2020.10.26 Chapter 6: Synchronization Tools (0) 2020.10.16 Chapter 2: Operating-System Structures (0) 2020.10.11 Chapter 5: CPU Scheduling (0) 2020.09.28