목록학교에서 들은거 정리/운영체제 (17)
mojo's Blog
What on-disk structures to represent files and directories? - Contiguous, Extents, Linked, FAT, Indexed, Multi-level indexed - Which are good for different metrics? What disk operations are needed for: - make directory, open file, write/read file, close file on-disk structures : disk 상에 있는 구조체로 file, directory를 나타내기 위한 용도다. contiguous, extents, linked, fat, indexed, multi-level indexed 등..
Concepts File : - byte 들의 단순한 선형적인 array로 정의된다. - inode number 로서 low-level 이름을 각 파일마다 가지고 있다. Directory : - 디렉토리도 파일이다. - A list of pairs. Interface : Creating a file O_CREAT flag을 사용하여 open system을 사용한다. int fd = open("foo", O_CREAT | O_WRONLY | O_TRUNC, S_IRUSR | S_IWUSR); O_CREAT : 파일을 생성 O_WRONLY : 파일이 열릴 때, 오직 write 만을 허용 O_TRUNC : 파일 사이즈를 0으로 만듬 (그러나 기존에 있던 내용물이 제거됨) Interface : Reading a..
Hard Disk Drives Hard drive 의 특성을 이해해야 내부적으로 어떻게 돌아가는지에 대해 알 수 있다! Base Geometry hard drive를 옆에서 본 측면이다. platter가 3개 있고 platter 위아래 부분은 surface 이다. (density를 높이기 위해 아래에도 있음) arm이 왔다 갔다하고 위아래에 존재함 예를 들어 foo파일이 첫번째 platter에 있다면 6개의 Disk head가 병렬적으로 센싱하지 않는다. => 하나만 active 상태가 되서 파일을 찾아감 (controller가 다 잡을 수 없기 때문 + 충분히 빠른 이유) 이번엔 위에서 본 hard drive 이다. Arm이 왔다 갔다 하고 Sector가 512 byte로 존재한다. 읽거나 쓸 때 51..
Semaphore: A definition #include sem_t s; sem_init(&s, 0, 1); // initialize s to the value 1 int sem_wait(sem_t *s) { decrement the value of semaphore s by one wait if value of semaphore s is negative } int sem_post(sem_t *s) { increment the vlaue of semaphore s by one if there are one or more threads waiting, wake one } sem_t 에 대한 객체 s는 integer value 를 가지고 있으며 sem_wait(), sem_post() 으로 조작이 가능하다..
Condition Variables There are many cases where a thread wishes to check whether a condition is true before a continuing its execution. 예를 들어서 부모 쓰레드가 자식 쓰레드가 완료되었는지 아닌지에 대한 점검하는 것으로 이를 보통 join() 이라고 부른다. 다음 코드를 보도록 하자. #include #include #include #include void *child(void *arg) { printf("child\n"); return NULL; } int main(int argc, char *argv[]){ printf("parent : begin\n"); pthread_t c; pthread_c..
Evaluating Spin Locks 이전에 구현했었던 TestAndSet 함수에 대해서 생각해보도록 한다. 1. Correctness : critical section에 들어가는 issue를 해결하였음 => Ok 2. Fairness : 정확하게 1 : 1 비율로 lock이 걸린다는 보장이 없음 또한, thread spinning이 영원히 spin 할지도 모름 => No 3. Performance : spinning을 통한 지속적인 CPU 점유 발생 즉, overhead 발생 Compare-And-Swap (SPARC) 주소(ptr)에 대한 값이 expected값과 동일한지에 대한 Test를 진행하도록 하는 매커니즘이다. (1) 만약 동일한 경우 : 주소(ptr) 값에 new 값을 업데이트 하고 이전..