일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 백준 2493번
- 그래프(Graph)
- 이분 탐색(Binary Search)
- BFS
- 큐(Queue)
- BFS(Breadth First Search)
- 백준 18352번
- 백준 17608번
- DFS(Depth First Search)
- 그리디 알고리즘(Greedy Algorithm)
- 백준 2261번
- 플로이드 워셜 알고리즘(Floyd-Warshall Algorithm)
- 백준 1948번
- DFS
- 백준 9012번
- 백준 2504번
- 스택(Stack)
- 분할 정복(Divide and Conquer)
- 동적 프로그래밍(Dynamic Programming)
- 백준 1707번
- 백준 21606번
- DFS & BFS
- 위상 정렬(Topology Sort)
- 이분 그래프(Bipartite Graph)
- 위상 정렬(Topological Sort)
- 백준 10000번
- 트리(Tree)
- 알고리즘 개념
- 백준 2812번
- 다익스트라 알고리즘(Dijkstra Algorithm)
- Today
- Total
Always Be Wise
Project_4 : File System - Synchronization 본문
제공된 파일 시스템은 외부 동기화를 요구한다. 즉, 호출자는 한 번에 하나의 스레드만 실행할 수 있는지 확인해야 한다.
외부 동기화가 필요없는 세분화된 동기화 전략을 채택해야 한다. 독립적인 항목들에 대한 작업은 독립적이어야 한다.
서로 다른 캐시 블록에 대한 작업은 독립적이어야 한다.
특히, 특정 블록에서 I/O가 요구되는 경우, I/O가 완료될 때까지 기다리지 않고, I/O가 필요하지 않은 다른 블록에서 작업을 진행해야 한다.
여러 프로세스가 한 번에 하나의 파일에 액세스할 수 있어야 한다.
한 파일을 여러 번 읽는 것은 서로 기다리지 않고 완료할 수 있어야 한다.
파일에 작성하는 것이 파일을 확장하지 않을 때, 여러 프로세스에서 한 번에 하나의 파일을 쓸 수 있어야 한다.
다른 프로세스에서 파일을 쓸 때 프로세스별로 파일을 읽으면 쓰기가 완료되지 않았거나 모두 또는 일부 완료되었음을 알 수 있어야 한다.
write 시스템 콜이 호출자에게 리턴한 후에, 모든 후속 reader는 변경사항을 확인해야 한다.
마찬가지로 두 프로세스가 동시에 파일의 동일한 부분에 쓸 때 데이터는 인터리빙 될 수 있다.
반면에 파일을 확장하고 데이터를 새 섹션에 쓰는 것은 원자적이어야 한다.
프로세스 A와 B 모두 주어진 파일이 열려 있고 둘 다 파일 끝에 있다고 가정하자.
A가 파일을 읽는 동시에 B가 파일을 쓰는 경우 A는 B가 쓰는 내용을 모두 읽거나 일부 또는 전혀 읽지 않아야 한다.
다른 디렉터리에 대한 작업은 동시에 수행되어야 한다. 동일한 디렉터리에 대한 작업은 서로 대기할 수 있다.
여러 스레드에 의해 공유되는 데이터만 동기화하면 된다.
기본 파일 시스템에서 file 구조체와 dir 구조체는 단일 스레드에 의해서만 접근된다.
'카이스트 정글 - 프로젝트 > Pintos' 카테고리의 다른 글
Project_4 :File System - Weekly I Learnd (0) | 2022.02.03 |
---|---|
Project_4 : File System - Buffer Cache (0) | 2022.01.30 |
Project_4 : File System - Subdirectories and Soft Links (0) | 2022.01.29 |
Project_4 : File System - Indexed and Extensible Files (0) | 2022.01.29 |
Project_4 : File System - Introduction (0) | 2022.01.29 |