요청시 메모리에 올린다. 실제로 필요할 때 page를 메모리에 올리는 것
당장 필요하지 않는 것은 backing store, disk, swap area에 있다.
효과
그래서 Valid / Invalid bit을 사용함
Invalid : 사용되지 않는 주소 영역, 페이지가 물리적 메모리에 없는 경우
invalid bit이 set돼있으면 Page Fault ➡️ 요청한 것이 메모리에 없을 때 trap(s/w interrupt) 발생 시킴.
OS의 대처가 정의되어있음
➡️ 오버헤드가 엄청 남. (page fault, swap out, restart 등)
미래를 알고 있다고 가정 (reference string을 알고 있다.)
page fault를 가장 적게하는 알고리즘
가장 먼 미래에 참조되는 page 선택
하지만 미래 참조를 모른다.
다른 알고리즘의 성능에 대한 upper bound를 제공.
미래를 모르니 과거를 통해 선택
먼저 들어온 것을 먼저 내쫓음
하지만 Frame이 늘어나면 page fault가 늘어나는 경향이 있음
가장 최근에 덜 사용된. 들어온 이후로 사용 횟수를 기준으로
가장 잘 사용되는 알고리즘. page fault를 가장 줄일 수 있음.
단점: 그 이전의 기록을 고려하지 않는다
Linked List 이용 ➡️ O(1) : 가장 앞쪽을 선택하면 된다.
줄을 세워 가장 앞에 있는 것이 LRU
가장 뒤에 있는 것이 MRU
새로 참조 되는 것은 가장 뒤쪽으로 이동시킨다.
참조 횟수가 가장 적은 페이지를 선택
단점: 이제 막 참조가 시작되고 있는 것이라 이후에도 또 참조되는 것일 수도 있음 (참조 연속)
Heap 이용 ➡️ O(logn)
참조가 한번 증가한다고 가장 참조 횟수가 많은 것이 아니라서 모든 항목과의 비교가 필요함.
LL을 사용하면 O(n)이 걸리게 된다. 그래서 min heap을 이용한다.
Cahching
빠른 공간인 캐쉬에 요청된 데이터를 저장해두고 또 요청하면 캐쉬에서 제공하는 방식
다양한 분야에서 사용한다.
OS가 참조 횟수, 참조 시점 등을 관리해야 하는데 virtual은 OS가 관리하지 않고, CPU가 넘어와야 알기 때문에 사용할 수 없다. 즉, Page fault일 때만 OS가 CPU를 얻기에 모른다.
LRU의 근사 알고리즘.
Second chance algorithm, NUR, NRU (not recently used)
원래는 어떤 프로그램의 page인지 신경쓰지 않아, page 개수의 불균형 있음
Global
Replace시 다른 Process에 할당된 frame을 뺏어 올 수 있다.
Process 별 할당량을 조절하는 방법
FIFO, LRU, LFU를 사용하면 알아서 조절되는데, Worling set, PFF 알고리즘이 더 효과적
Local
자신에게 할당된 frame 내에서만 쫓아내기
할당이 적어서 page fault가 빈번히 일어남
프로세스의 원활한 수행에 필요한 최소한의 page frame수를 할당 받지 못한 경우
➡️ Mutiprogramming degree MPD를 조절해야함.
특정 MPD까지는 CPU utilizaion이 높지만, 일정 수준을 넘어가면 Thrashing 발생
그래서 working-set, PFF 알고리즘을 이용함
Locality에 기반하여 한꺼번에 메모리에 올라와있어야 하는 page들의 집합을 Working Set이라 함
한꺼번에 올라와 있도록 보장해줘야 함
해당 집합이 전체다 올라와있어야 수행되고, 그렇지 않다면 모든 frame을 반납 후 suspend된다.
Working set 결정
과거를 통해 추청. Window 이용.
window size를 특정 시간으로 두고. 해당 시간 크기 만큼을 window라 함.
이 시간 만큼은 쫓아내지 못함
즉, 참조된 후 특정 시간 동안 해당 page를 메모리에 유지 후 버리는 것.
방법
Working set size의 합이 page frame 수보다 큰 경우 : 일부 프로세스를 swap out 시켜 남은 process의 working set을 우선적으로 충족. 여유가 생기면 그때 올린다.
추정하지 않고, page fault rate을 직접 관찰. 시점과 어느 프로세스인지 관찰
bound가 있어 upper 혹은 lower을 관리함
➡️ page fault가 일정 수준이 되도록!
감소시키면
하지만
➡️ 페이지 크기가 큰 것이 좋음. 그래서 요즘은 증가시키는 추세
A named collection of related information
파일을 관리하기 위한 각종 정보들. 파일의 내용은 아님
OS가 파일을 관리하는 부분
파일, 파일 메타데이터, 디렉터리 정보 등을 관리
저장 방법, 보호 등을 결정함
파일의 메타데이터를 보관하고 있는 일종의 파일
내용 : 하위 파일들의 메타 데이터
연산 : search for file, create a file, delete a file, list a directory, rename 등
OS는 논리적 디스크를 보고 관리함
물리를 여러 파티션을 두어 나눔
file system 혹은 Swap area로 이용함
파일의 메타데이터를 메모리에 올려둠
open file table은 system-wide하여 한개만 존재한다.
fd를 매개로 넘겨 읽어온다. 파일 크기를 지정함
1. system call로 CPU가 OS에 넘어간다.
2. PCB에 저장해둔 fd를 통해 해당 메타데이터를 찾아간다.
3. Open file table에서 찾은 해당 메타데이터로 논리 디스크에서 해당 위치를 찾아간다.
4. 그곳의 content를 읽어서 커널 메모리 영역 한 위치에 일부 읽어 둔다.
5. 읽어둔 것을 copy해서 프로세스에게 전달한다.
OS는 논리 디스크에서 읽어오기 전 이 부분을 먼저 확인하고 있으면 이것을 전달함.
OS가 이것을 계속 관리하기에 paging과 달리 LRU, LFU가 가능하다. 왜냐하면 파악하고 있으니깐.
Process마다 어느 논리 디스크 부분을 접근하고 있는지 offset이 필요하다.
접근 권한과 어떠한 접근인지에 대한 관리가 필요하다.
Access Control 방법
행에는 파일, 열에는 사용자를 두어 행렬로 권한을 표시해둠
➡️ sparse matrix 형태로 낭비가 큼
Linked List로 구현
1. ACL
파일이 주체가 되어 사용자 목록을 연결함
2. Capability
사용자가 주체가 되어 파일 목록을 연결함
➡️ 그래도 오버헤드가 있다.
모든 user을 owner, group, public의 세 그룹으로 구분하여 3비트씩 총 9비트로 표현
각 그룹 마다 권한을 표시해둔다.
가장 효율적인 방법
파일 마다 password를 두는 방법
➡️ 굉장히 많아지고, 관리가 어려워짐
서로 다른 파티션이라도 접근 가능하도록
한 파티션의 어떤 directory에 다른 파티션의 root를 연결해둠
시스템이 제공하는 파일 정보 접근 방식