'리눅스커널' 카테고리의 다른 글
시스템콜 (0) | 2015.04.16 |
---|---|
systemcall (0) | 2015.04.15 |
schedule()함수 (0) | 2015.04.15 |
프로세스1-3 (0) | 2015.04.14 |
프로세스1-1(프로세스디스크립터, 상태전이) (0) | 2015.04.14 |
시스템콜 (0) | 2015.04.16 |
---|---|
systemcall (0) | 2015.04.15 |
schedule()함수 (0) | 2015.04.15 |
프로세스1-3 (0) | 2015.04.14 |
프로세스1-1(프로세스디스크립터, 상태전이) (0) | 2015.04.14 |
start_kernel 함수에서
sched_init 를 호출한다. : 스케줄러와 관련된 자료구조를 초기화
- 그룹 스케줄링에서 사용하는 task_group
- 실시간 프로세스에게 CPU 자원을 분배하기 위한 rt_bandwidth
- CFS 스케줄러의 스케줄링 단위를 표현하는 sched_entity
- CPU의 런큐를 위한 runqueue
- 실시간 프로세스를 스케줄링 할떄 의사결정에 사용되는 root_domain구조체
스케줄링 관련 커널 설정
프로세스를 그룹화하는 방법에 대한 설정 CONFIG_CGROUP_SCHED - 그룹화하는 방법으로 cgroup을 사용 CONFIG_USER_SCHED - 그룹화하는 방법으로 process의 UID를 사용
그룹 스케줄링 대상에 대한 설정 CONFIG_FAIR_GROUP_SCHED - normal process에 대한 그룹 스케줄링을 활성화 CONFIG_RT_GROUP_SCHED - real time process에 대한 그룹 스케줄링을 활성화 |
9657 void __init sched_init(void)
함수내 선언된 변수
int i, j;
unsigned long alloc_size = 0, ptr;
systemcall (0) | 2015.04.15 |
---|---|
스와퍼(Swapper)프로세스 (0) | 2015.04.15 |
프로세스1-3 (0) | 2015.04.14 |
프로세스1-1(프로세스디스크립터, 상태전이) (0) | 2015.04.14 |
불연속메모리할당 (1) | 2015.04.10 |
프로세스 디스패처
가장 적절한 프로세스에 실행권한을 주기위해, CPU동작을 중단하고 새로운 프로세스를 수행한다.
프로세스 전환(Process Switch, 프로세스 관리(Process Dispatch), Process Dispatcher 라고 한다.
static inline void context_switch(struct rq *rq, struct task_struct *prev, struct task_struct *next) prepare_task_switch(rq, prev, next); if (unlikely(!mm)) { if (unlikely(!prev->mm)) { /* Here we just switch the register state and the stack. */ barrier(); |
systemcall (0) | 2015.04.15 |
---|---|
스와퍼(Swapper)프로세스 (0) | 2015.04.15 |
schedule()함수 (0) | 2015.04.15 |
프로세스1-1(프로세스디스크립터, 상태전이) (0) | 2015.04.14 |
불연속메모리할당 (1) | 2015.04.10 |
프로세스란 무엇인가 ..공부해보자.
Process Descriptor : 한 프로세스와 관련된 모든 정보를 담고 있는 task_struct 자료구조?
리스트의 각 task task_struct를 프로세스 디스크립터라한다.
?? 커널은 task_t 데이터 타입을 struct task_struct 와 같은 것으로 정의?
Figure 3.1. The process descriptor and task list.
Figure 3.3 Flow chart of process states
0 :TASK_RUNNIG
1 :TASK_INTERUPTIBLE
2: TASK_UNINTERRUPTIBLE
4: TASK_STOPPED
- 프로세스 실행 중단. SIGSTOP , SIGTSTP, SIGTTIN, SIGTTOU 일 경우
8: TASK_TRACED
16: EXIT_ZOMBIE
- 프로세스가 종료되었지만 부모프로세스가 wait4() , waitpid() 시스템 콜을 호출하여 종료 프로세스의 정보를 반환하지 않은 경우 -----------보충
32: EXIT_DEAD
- 보충----------------
64: TASK_DEAD
128 : TASK_WAKEKILL
256 : TASK_WAKING
커널에서는 set_task_state , set_current_state 매크로를 사용하여 프로세스의 상태를 설정
같은 그룹에 있는 스레드의 PID 가 같은가? 표준을 위해 리눅스는(Thread Group) 도입. 스레드들이 공유하는 식별자는 스레드 그룹의 리더, 즉 그룹 내 첫 번째 경량 프로세스의PID이며 프로세스 디스크립터의 tgid 필드에 저장된다. getpid() 시스템콜은 pid값 대신 tgid 값을 반환하므로 멀티스레드 애플리케이션의 모든 스레드는 같은 식별자를 공유한다. 대부분의 프로세스는 구성원이 1개인 스레드 그룹에 속하므로 tgid 필드는 pid 필드와 값이 같다..QQ~~.....?????????????????????????????
다시정리하자. 모르겠다.
thread_info 구조체(arch/x86/include/asm/thread_info.h)프로세스의 저수준(Low-level) 정보
104P 이해불가.
struct thread_info {
--------------arm----------- /* |
http://m.blog.daum.net/english_100/71 참고이해하도록
프로세스 디스크립터 포인터(Process Descriptor Pointer)를 통해 프로세스를 참조한다.
참고 : 그림및 내용 http://www.makelinux.net/books/lkd2/ch03lev1sec1
리눅스 커널의 이해(개정 3판)
http://forum.falinux.com/zbxe/index.php?document_srl=551428&mid=lecture_tip
systemcall (0) | 2015.04.15 |
---|---|
스와퍼(Swapper)프로세스 (0) | 2015.04.15 |
schedule()함수 (0) | 2015.04.15 |
프로세스1-3 (0) | 2015.04.14 |
불연속메모리할당 (1) | 2015.04.10 |
커널 V. 2.6.32.65
참고 링크
페이지 테이블에 주소 변환 정보가 채워지는 원리 http://www.iamroot.org/xe/Kernel_8_ARM/54103
초보자를 위한 리눅스 커널의 메모리 관리 http://dojeun.egloos.com/317480
/linux/vmalloc.h
27 struct vm_struct { 54 extern void *vmalloc(unsigned long size); |
/usr/src/linux-2.6.32.65/mm/vmalloc.c
1630 * vmalloc - allocate virtually contiguous memory 1638 void *vmalloc(unsigned long size) 1572 /** 1585 static void *__vmalloc_node(unsigned long size, unsigned long align, 세그먼트 페이지 |
systemcall (0) | 2015.04.15 |
---|---|
스와퍼(Swapper)프로세스 (0) | 2015.04.15 |
schedule()함수 (0) | 2015.04.15 |
프로세스1-3 (0) | 2015.04.14 |
프로세스1-1(프로세스디스크립터, 상태전이) (0) | 2015.04.14 |