Linux Context Process Context is set of data

  • Slides: 24
Download presentation

Linux의 프로세스 관리 Context Process Context is set of data required by CPU §

Linux의 프로세스 관리 Context Process Context is set of data required by CPU § § Process Address Register Program Counter Stack Pointer Operational Register Running Process Waiting Process Context Switching Process Dispatcher (Scheduler) Ready Process 3

Linux의 프로세스 관리 ★ Process Descriptor and the Task Structure(프로세스 서술자와 태스크 구조체) 커널은

Linux의 프로세스 관리 ★ Process Descriptor and the Task Structure(프로세스 서술자와 태스크 구조체) 커널은 task list라는 circular doubly linked list에 프로세스들의 리스트를 저장한다. Processor descriptor의 타입 struct task_struct는 <linux/sched. h>에 정의되어 있다. ★ Allocationg the Process Descriptor(프로세스 서술자의 할당) Slab allocator를 통해 process descriptor는 동적으로 생성된다. Thread_info는 process descriptor에 대한 포인터를 가진다. 각 task의 thread_info structure는 스택의 끝부분에 할당된다. Tasks는 task_struct에 대한 포인터이다. Thread_info structur는 <asm/thread_info. h>에 정의되어 있다. ★ Storing the Process Descriptor(프로세스 서술자 저장) 시스템은 고유한 process 식별자 갑 즉 PID로 process를 식별한다. 4

Linux의 프로세스 관리 ★Process State(프로세스 상태) • Task_Running - The process is runnable, user-space에서

Linux의 프로세스 관리 ★Process State(프로세스 상태) • Task_Running - The process is runnable, user-space에서 실행중인 프로세의 상태 혹은 running queue에서 대기하는 상태 • Task_INTERRUPTIBLE – process가 sleeping(blocked)상태로 어떤 상황이 끝나기를 기다린다. • Task_UNINTERRUPTIBIE – signal을 받더라도 깨어나서 runnable상태가 되지 않는다. • __TASK_TRACED – process가 다른 process에 의해 추적된다. 예를 들면, ptrace를 이용한 debugger가 있다. • __TASK_STOPPED – Process execution has stopped; task가 실행중이 아니거나 실행될 자격이 없다. 5

Linux의 프로세스 관리 ★ Manipulating the Current Process State(현재 프로세스 상태 조작) Set_task_state(task, state);

Linux의 프로세스 관리 ★ Manipulating the Current Process State(현재 프로세스 상태 조작) Set_task_state(task, state); /* set task ‘task’ to state ‘state’ */ Task ->state = state; Set_current_state(state)와 set_task_state(current, state)는 같다. <linux/sched. h> ★ Process Context(프로세스 컨텍스트) 보통 프로그램 실행은 user-space에서 발생한다. 프로그램이 system call을 실행하거나 exception을 트리거하면 kernel-space로 들어간다. 6

COW: Copy On Write § 실행 시간에 fork() 명령에 의해 분기된 Child Process는 실제

COW: Copy On Write § 실행 시간에 fork() 명령에 의해 분기된 Child Process는 실제 Parent Process의 최초 메모리를 공유한다. § 이후 Parent Process의 Memory 변경(Writing)이 발생하면 이때 실질적으로 Parent Process와는 분리된 독립적인 메 모리가 배정된다. Process Memory fork() system call Parent Process Memory Child Process Change of shared memory Parent Process Memory Child Process Memory Create and copy parent memory for child process. 9

Linux의 프로세스 관리 Program Execution Parent process (sh) Context Process fork Child process (user

Linux의 프로세스 관리 Program Execution Parent process (sh) Context Process fork Child process (user proc - ls) exec Wait Ready Running Zombie Exit 13

Linux의 프로세스 Scheduling ★ The Linux Scheduling Algorithm(리눅스 스케줄링 알고리즘) • Scheduler classes Linux

Linux의 프로세스 Scheduling ★ The Linux Scheduling Algorithm(리눅스 스케줄링 알고리즘) • Scheduler classes Linux scheduler는 모듈 방식이다. Scheduler class는 다른 알고리즘들이 공존하게 해준다. 각 scheduler class는 우선순위를 가진다. 기본 scheduler 코드는 kernel/schedule. c에 정의되어 있다. Completely Fair Scheduler(CFS)는 Linux에서 SCHED_NORMAL이라 불리는 보통 프 로세스들을 위한 scheduler class이다. CFS는 kernel/sched_fair. c에 정의. 18

Linux의 프로세스 Scheduling ★ The Linux Scheduling Algorithm CFS의 4개 구성요소 • • Time

Linux의 프로세스 Scheduling ★ The Linux Scheduling Algorithm CFS의 4개 구성요소 • • Time Accounting Process Selection The Scheduler Entry Point Sleeping and Waking Up 19

Linux의 프로세스 Scheduling ★ The Scheduler Entry Point(스케줄러 진입 위치) Process schedul의 메인 진입점은

Linux의 프로세스 Scheduling ★ The Scheduler Entry Point(스케줄러 진입 위치) Process schedul의 메인 진입점은 schedule() 함수이다. 이 함수는 process scheduler 를 invoke한다. 이 함수의 중요한 부분은 pick_next_task()이다. 22