School Lecture Study/Linux System Application Design 16

리눅스 커널 분석 - Mutex

리눅스 시스템 응용 설계 term project였던 리눅스 커널 분석이다. Mutex 코드 분석을 맡았고, 분석했던 걸 정리하였다. 딥한 부분을 다루기보다는 Mutex의 코드 프로세스에 초점을 두었다. kernel version은 linux 5.4.214이다. Mutex 개념 정의 한 스레드, 프로세스에 의해 소유될 수 있는 key를 기반으로 한 상호배제기법 자원에 대한 접근을 동기화하기 위해 사용 프로그램이 시작될 때 고유한 이름으로 생성 Locking 메커니즘 오직 하나의 스레드만 동일한 시점에 mutex를 얻어 critical section에 들어올 수 있다. 또한 오직 이 스레드만이 critical section에서 나갈 때 mutex를 해제할 수 있다. Mutex Busy Waiting? CPU..

9. Memory Management

중앙대학교 3-2 리눅스 응용 설계 (손용석 교수님) 과목 정리입니다. Memory Organization Shared-memory system shared memory system은 적어도 one multi-core CPU로 구성되어 있다. 가장 흔하게 사용되는 patterns Uniform memory access (UMA) Non-uniform memory access (NUMA) Two ways of managing physical memory UMA vs NUMA UMA 모든 core에게 동일한 access performance와 memory location을 single bus를 통해 제공한다. 주로 symmetric multiprocessing system으로 불린다. 흔히 single mu..

8. Linux Kernel Data Structure

8. Linux Kernel Data Structure 중앙대학교 3-2 리눅스 응용 설계 (손용석 교수님) 과목 정리입니다. Kernel Data Structure kernel data structure는 current state와 system의 정보를 저장할 때 매우 중요하다. Example Red-black tree는 scheduling entity 관리 Linked list는 file system의 transaction 관리 kernel data structure는 오직 kernel과 kernel의 subsystem에 의해서만 접근 가능하다. data structrue는 다른 data structure와 system data를 가리키는 pointer를 포함한다. 때때로, data structure..

7-4. Task Scheduling in Linux (4)

중앙대학교 3-2 리눅스 응용 설계 (손용석 교수님) 과목 정리입니다. __schedule() scheduling의 key function current task의 실행을 멈추고, 새롭게 실행될 next task가 선택된다. next task를 실행하기 위해 user address space information, register, 두 task의 kernel stack 이 전환된다. 이전 task의 state가 TASK_RUNNING이 아니고, preempt 값이 false인 경우 prev_task를 처리한다. Ex. task가 sleep API를 사용하는 경우 task는 run queue에서 dequeue 된다. signal_pending_state는 Task state가 TASK_INTERRUPTIB..

7-3. Task Scheduling in Linux (3)

중앙대학교 3-2 리눅스 응용 설계 (손용석 교수님) 과목 정리입니다. Task Group and Task Scheduling Entity Only Considering Fairness of Tasks task의 관점에서 CPU allocation은 공정하다. user의 입장에서는 CPU allocation이 공정하지 않다. CFS는 task group이 user 사이의 fairness를 보장하도록 지원해야 한다. task group은 task 뿐만 아니라 다른 task group도 포함할 수 있다. Task scheduling entity scheduling의 단위로서 task와 task group을 모두 지원하기 위해 scheduling entity의 개념이 도입되었다. task 나 task grou..

7-2. Task Scheduling in Linux (2)

중앙대학교 3-2 리눅스 응용 설계 (손용석 교수님) 과목 정리입니다. Importance of Fair-Share Scheduling fairness 보장이 제대로 이루어지지 않으면 server / cloud computing에서 문제가 발생할 수 있다. (다른 user or group에서 starvation이 일어날 수도 있음) Fair-share scheduling process 사이에서 자원을 균등하게 분배하는 것이 아닌 user 또는 group 사이에서 자원을 균등하게 분배한다. Completely Fair Scheduler (CFS) Linux kernel의 primary task scheduler process를 실행하기 위한 CPU resource 할당을 처리하고, 전체 CPU 활용률을 극..

7-1. Task Scheduling in Linux (1)

중앙대학교 3-2 리눅스 응용 설계 (손용석 교수님) 과목 정리입니다. Scheduling? OS는 한 번에 2개 이상의 task를 실행 가능한 메모리에 load할 수 있다. load된 task들은 time multiplexing을 사용하여 CPU 자원을 공유한다. Goals of Scheduling 모든 scheduler는 다음의 규칙을 따르기 위한 strategy를 선택한다. Utilization (효율) CPU가 유용한 work로 최대한 바쁜 상태로 유지한다. Throughput 시간당 처리되는 task의 개수를 최대화한다. Turnaround time task가 시작되는 시간과 끝나는 시간 사이의 시간을 최소화한다. Fairness 각각의 task가 CPU를 공평하게 공유하도록 한다. Linux ..

6-4. Synchronization (4)

중앙대학교 3-2 리눅스 응용 설계 (손용석 교수님) 과목 정리입니다. Implementation of Spinlock in Linux Kernel Big-endian next가 low addr owner가 high addr Little-endian owner가 low addr next가 high addr Little Endian and Big Endian Little Endian : LSB가 low address에 저장 Big Endian : MSB가 low address에 저장 ldrex : global variable (&lock→slock)을 lockval에 대입 add : lockval에 TICKET_SHIFT 추가한 값을 newval에 대입 strex : global variable 업데이트 ..

6-3. Synchronization (3)

중앙대학교 3-2 리눅스 응용 설계 (손용석 교수님) 과목 정리입니다. Spinlock in Linux Kernel spinlock 은 lock을 사용할 수 있는지 반복적으로 확인하는 동안 lock을 획득하려는 thread가 loop에서 대기하도록 하는 lock thread가 active한채로 남아있는데 useful task를 수행하지 않기 때문에 spinlock의 사용은 busy waiting의 일종이다. thread는 lock을 사용할 수 있게 될 때까지 계속 spinning 계속되는 반복은 multiprogramming environment 에서 문제가 생길 수 있다. Spinlock의 busy waiting은 CPU cycle을 낭비한다. Spinlock은 context switching이 필요 ..

6-2. Synchronization (2)

중앙대학교 3-2 리눅스 응용 설계 (손용석 교수님) 과목 정리입니다. Disabling Preemption task들 사이의 race condition을 막는다. (single core) task1이 critical section을 실행하는 동안 task2에게 preempt 당함 다른 Task가 critical section을 실행하는 동안에는 preemption disable 하고, ciritical section을 종료하면 preemption enable multi-core의 race condition은 막지 못한다. task 1에서 preemption을 막아도 다른 core에서 critical section에 접근하는 것을 막을 수 없다. task와 ISR 사이의 race condition을 막을..