Download presentation
Presentation is loading. Please wait.
Published byHarold Flowers Modified over 9 years ago
1
Kernel Programming Task Management 2005. 5. 30( 월 ) 이 병 희 icebyung@hufs.ac.kr
2
Contents Introduction Task state transition Task structure Scheduling
3
Introduction What is the task ? Running or runable program Execution environment of a program Scheduling entity task management of kernel task 의 생성 / 소멸 / 상태전이 / 문맥교환 등을 관리 task management 를 위해 task 가 사용하는 자원에 대한 정보 유지 (task_struct 사용 ) Creation of task Use fork() function fork : 자신의 프로세스와 똑같은 프로세스를 copy-on-write 형식으로 실행, 이때 생성된 프로세는 자신만의 PID 를 가짐 exec : 역시 fork 와 마찬가지로 새로운 프로세스를 생성, 하지만 fork 와 같이 copy-on-write 를 이용한 전혀 새로운 프로세스를 실행시키지 않고, 현재의 프로세스이미지를 새로운 프로세스 이미지가 덮어씀
4
Task state transition initial fork ready fork running dispatch timeout waiting zombie wakeup exit sleep wait ready state : 생성된 task 가 준비상태가 되어 ready_queue 에 연결됨 스케줄러는 자신의 스케줄링 정책에 따라 task 를 선택하여 running state 로 바꿈 zombie state : 자신의 모든 자원을 커널에 반납 task 의 exit status 상태와 PID 는 여전히 남아서 task_struct 에 유지 waiting state : sleep system call 이 불리거나 lock 이 걸려있는 자원을 기다릴 경우 waiting 상태로 전이. waiting state 로 전이되는 경우 sleep_queue 에 연결
5
Task state transition user program execution user level running return from system call Interrupt routine system call Interrupt Scheduler readywaiting Kernel level running kernel level running 상태로의 전이 : system call 과 interrupt running state
6
Task structure Task 가 생성된 후 kernel 은 task 의 정보관리를 위해 여러 자료구조들 (context) 을 할당 Context 는 3 부분으로 구분가능 system context memory context hardware context sp eip … eflags file structure inode fd task_structsegment table page table thread structure (TSS) swap or a.out disk system context hardware context memory context
7
Task structure task_struct Include/linux/sched.h 에 정의 각 task 마다 하나씩 존재 task identification state task relationship scheduling information signal information memory information file information thread structure time information resource limits miscellaneous
8
Task structure state
9
Task structure task relationship new processes are copied from previous process task structure keeps pointers to its parent process and it siblings all processes in the system are held in a doubly linked list prev_task init_task prev_task next_task prev_task next_task task next_task.... prev_task next_task task prev_run next_run run_queue prev_run next_run youngest child parent childoldest child task_struct p_ctpr p_pptr p_ysptr p_osptr p_ysptr [ Task family relationship]
10
Task structure task relationship
11
Task structure signal information task 에게 비동기적인 사건의 발생을 알리는 매커니즘 signal 처리를 위한 3 가지 기능 다른 task 에게 signal 을 보낼 수 있어야 함 (sys_kill() system call) signal 을 수신할 수 있어야 함 (sigpending, signal, blocked) signal 이 오면 이를 처리할 수 있는 함수를 호출 (sys_signal(), sig)
12
Task structure count action[_NSIG] siglock sa_handler sa_flags sa_restorer sa_mask sys_signal(sig, handler) /* kernel/signal.c */ do_sigaction(sig, new_sa, old_sa) …. sig signal,blocked sigpending …. task_struct …. signal_struct sigaction sigset_t 63 0 …. sigset_t 63 0 sys_kill(pid,sig) /* kernel/signal.c */ kill_proc_info(sig, info, pid) send_sig_info(sig, info, *t) sigaddset(t->signal, sig); t->sigpending = 1;
13
Task structure thread information task 가 실행되다 중지할 때 현재 어디까지 실행하였는지 저장 처리기의 레지스터들의 내용을 저장 include/asm-i386/processor.h unsigned long esp0; unsigned short ss0; unsigned long esp1; unsigned short ss1; unsigned long esp2; unsigned short ss2; unsigned long cr3; unsigned long eip, eflags; unsigned long eax, ecx, edx, ebx; unsigned long esp; unsigned long ebp, esi, edi; unsigned short es, cs, ss, ds, fs, gs; unsigned short ldt; ……..... tss... task_struct
14
Task structure time information kernel keeps track of time information start_time : task creation time struct tms times : task start time at user and kernel level resource limits indicates limitation of resource task_struct … rlim[] … /*include/linux/resource.h */
15
Scheduling Linux scheduling clock interrupt 는 10msec 마다 발생 real-time task 지원 task_struct 스케줄링 관련 변수 (/*include/linux/sched.h */) policy 태스크 유형 (task type) SCHED_FIFO :real-time task, non-preemptive SCHED_RR : real-time task, preemptive SCHED_OTHER : normal task, preemptive priority 태스크 우선순위 태스크가 생성될 때 기본 값인 20 (DEF_PRIORITY) 으로 설정 sys_nice() 나 sys_setpriority() 시스템 호출로 변경 가능
16
Scheduling counter 태스크의 처리기 사용량 태스크가 생성될 때 priority 값으로 설정 태스크가 수행중일 때, clock interrupt 이 발생하면 1 씩 감소 모든 태스크의 counter 값이 0 이 되면, 모든 태스크의 counter 값을 priority 값으로 재 설정 normal task 의 경우, 스케줄러는 priority + counter 값이 가장 큰 태스크를 선택하여 수행 need_resched 스케줄링이 수행될 필요가 있으면 1 로 설정 커널 수준 실행 상태에서 사용자 수준 실행 상태로 전이될 때 ( 시스템 호출이나 인터럽트 처리를 마칠 때 ), 이 변수를 조사하여 1 이면 스케줄러 호출 rt_priority 실시간 태스크의 우선 순위, 보통 1000 이상 sched_setscheduler(pid, policy, sched_param) 시스템 호출로 설정 실시간 태스크의 경우, 스케줄러는 이 값이 가장 큰 태스크를 선택하여 수행
17
Scheduling 스케줄링 함수 : schedule() function /* kernel/sched.c */ schedule() need_resched sleep_on - schedule real time task first (rt_priority) - select a task which has highest values of counter + priority (using goodness function) give advantage to the task which run this_cpu give slight advantage to the task which has mm object - if (counter == 0) for all task counter = priority - context switch : switch_to (current, next) /* arch/i386/kernel/process.c */
18
Scheduling Example of linux scheduling 3 normal tasks 단일 처리기 시스템 clock interrupt 는 10ms 마다 한 번씩 발생 T1 priority counter 0 20 200 20 400 20 0 20 600 20 800 20 020 millisecond 20 0 20 T2 priority counter T3 priority counter
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.