일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- mp4fpsmod
- 겨울 부산
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- PersistenceContext
- VARCHAR (1)
- 자원부족
- pytest
- JanusWebRTCServer
- Value too long for column
- JanusGateway
- 오블완
- vfr video
- terminal
- taint
- kotlin
- tolerated
- JanusWebRTC
- 코루틴 빌더
- table not found
- 달인막창
- 깡돼후
- k8s #kubernetes #쿠버네티스
- Spring Batch
- preemption #
- 코루틴 컨텍스트
- 티스토리챌린지
- PytestPluginManager
- JanusWebRTCGateway
- python
- 개성국밥
목록Operating System (13)
너와 나의 스토리
출처: http://pages.cs.wisc.edu/~remzi/OSTEP/file-intro.pdf The Crux: How to manage a persistent device 39.1 Files And Directories ● File file: 읽고 쓸 수 있는 linear한 byte 배열이다. 각각의 파일은 low-level name이 있는데, 보통 숫자이다. (inode number) 대부분의 시스템에서는 OS는 파일 구조를 많이 알고 있지 않다. ● Directory directory: 디렉터리도 low-level name을 가짐. 하지만 list 쌍처럼 구체적인 것을 포함함. ex) low-level name "10", 사용자가 읽을 수 있는 이름으로는 "foo"를 가지는 파일이 있다고 하..
32.2 Non-Deadlick bugs non-deadlock bugs의 두가지 주요 타입: atomicity violation bugs and order violation bugs. Atomicity-Violation Bugs - atomicity violation: 코드는 atomic한데 실행시에는 그렇지 않음 - ex) Thread 1:: if (thd->proc_info) { fputs(thd->proc_info, ...); } Thread 2:: thd->proc_info = NULL; thread1이 proc_info가 null이 아니여서 fputs()을 하려고 하는 직전에 interrupt가 되서 thread2가 실행되면, thread2가 info가 null이 되고, thread1이 다시 ..
출처: http://pages.cs.wisc.edu/~remzi/OSTEP/threads-sema.pdf The crux: lock과 condition variables을 대신해서 어떻게 semaphores을 쓸까? 31.1 Semaphores: A definition semaphore: 우리가 두 개의 루틴으로 조작할 수 있는 정수 값을 가진 객체 POSIX 표준에서는 이 루틴은 sem_wait(), sem_post()이다 semaphore의 초기화 값은 이것의 행동을 결정하므로 초기화 필수 1. semaphore 초기화 sem_init(&s, 0, 1); // semaphore가 같은 프로세스 내에서 thread를 공유 ㄴ 초기화 값은 1이면 critical section을 보호하는 lock처럼 사용..
28.1 Locks: The Basic Idea critical section: 공유 변수를 업데이트하는 부분 1 lock_t mutex; // some globally-allocated lock ’mutex’ 2 ... 3 lock(&mutex); 4 balance = balance + 1; // critical section 5 unlock(&mutex); critical section thread만 hold할 수 있다. lock()을 호출하면 lock을 얻도록 노력하고 만얀 lock을 hold하고 있는 다른 thread가 없다면 이 thread는 lock을 얻고 critical section에 진입할 수 있다. (이 thread를 the owner of the lock이라고도 부름) lock own..
page table이 메모리를 너무 많이 잡아 먹는다 프로그램마다 페이지 테이블을 각각 가지는데 여러개 동시에 작동하면 (프로그램 수*페이지 테이블 사이즈) 페이지 테이블이 RAM에 없어서 접근 불가 -> page table을 어떻게 작게 할 수 있을까? 쉬운 방법: Large page 페이지 크기를 크게해서 page table 사이즈를 줄인다. 단점 - internal fragmentation 유발 (각각의 페이지에서 메모리 낭비됨) 결론: 문제 해결 불가 Hybrid Approach: Paging and Segments 접근: 프로세스의 모든 주소 공간의 페이지 테이블을 한 개 두는 것 대신 각 논리적 세그먼트마다 두자. ex) code, heap, stack이 각각 페이지 테이블을 가짐 hybrid..
Topic: How to virtualize memory with pages 공간 관리하는 문제 해결에는 두 가지 접근법이 있다. - 변수 크기로 조각을 자르는 것 ㄴ fragmented가 유발될 수 있다 - 고정된 크기로 조각을 자르는 것 ㄴ> paging * page: 고정된 크기의 유닛 각각을 page라고 한다. * physical memory를 page frame이라고 부르는 고정된 크기의 슬롯 배열로 간주한다. 18.1 A simple example and overview - 가상 주소 공간의 페이지는 physical memory에 각각 다른 위치에 놓여있다. - Paging 장점 1. flexibility ㄴ heap, stack의 성장 등 사용할 공간을 생각할 필요가 없다 2. simplic..
- OS는 base와 bounds로 프로세스들을 physical memory의 다른 부분에 재배치 할 수 있다. - stack과 heap 사이에 큰 free space 덩어리가 있다. ㄴ 프로세스에 사용되지 않지만 여전히 physical memory를 차지한다 - base-bounds register 쌍을 이용해 가상 메모리에 접근하는 것은 낭비이다. ㄴ base-bounds는 생각보다 유동적이지 않음 The Crux : "How to support a large address space" 16.1 Segmentation: Gernalized Base/Bounds - MMU 안에 하나의 base-bounds쌍을 두는게 아니라 각 주소 공간의 논리적 segment마다 base-bounds 쌍을 둔다. * ..
CH 8. Multi-level Feedback"완벽한 지식없이 어떻게 스케쥴 할까?" 8.1 MLFQ: Basic Rules- 목표 ㄴ turnaround time 최적화 ㄴ response time 최소화 (job 길이에 대한 사전 정보 없이)- MLFQ는 구별되는 큐들을 가진다 각각의 큐들은 다른 우선순위 레벨을 가진다.- 주어진 시간에 실행할 준비가 된 작업이 하나의 큐에 있다.- Rround-robin scheduling 사용- MLFQ의 두 가지 기본 규칙 Rule 1: 만약 Priority(A) > Priority(B), A가 작동 Rule 2: 만약 Priority(A) = Priority(B), A&B가 RoundRobin에 따라 작동- 즉, MLFQ는 우선순위를 어떻게 정하느냐에 따라 ..