TASK
Posts
3 posts[라즈베리파이] 스케줄링: 프로세스 상태 관리
프로세스를 효율적으로 관리하기 위해서 커널은 프로세스에게 프로세스 상태를 부여합니다. 커널에서 정의한 프로세스 상태는 다음과 같습니다.[https://elixir.bootlin.com/linux/v4.14.70/source/tools/perf/builtin-sched.c]#define TASK_RUNNING0#define TASK_INTERRUPTIBLE1#define TASK_UNINTERRUPTIBLE2 커널에서 구동 중인 프로세스는 위에서 정의한 상태 정보를 갖고 있으며 커널은 이 정보를 기준으로 스케줄링을 수행합니다. 그러면 프로세스 상태는 어디에 저장할까요?프로세스를 관리하는 태스크 디스크립터 필드 중 state는 위에서 언급한 정수형 상태 정보를 저장합니다.[https://elixir.
[리눅스커널] 프로세스 상태: 언제 TASK_RUNNING 변경할까?
이번 시간에 프로세스를 RUNNING 상태로 누가 언제 변경하는지 알아봅시다. wake_up_new_task()[set_filter 가능 함수]wake_up_new_task() 함수는 _do_fork() 함수에서 프로세스를 생성하는 과정에서 호출됩니다. 코드를 봅시다.[https://elixir.bootlin.com/linux/v4.14.70/source/kernel/sched/core.c]1 void wake_up_new_task(struct task_struct *p)2 {3 struct rq_flags rf;4 struct rq *rq;56 raw_spin_lock_irqsave(&p->pi_lock, rf.flags);7 p->state = TASK_RUNNING; 7번째 줄
[라즈베리파이] Process - 프로세스 상태
이름으로 알 수 있듯이, state 필드는 프로세스가 어떤 동작 중인지 알려줍니다. 이 필드는 플래그의 배열이고 각 플래그는 프로세스 상태를 표현합니다.. 현재 리눅스 버전에서는 이 상태들이 상호 배타적이고, state의 플래그 하나만 설정하므로 나머지 플래그들은 Clear합니다. 프로세스 상태는 아래와 같습니다. TASK_RUNNING#define TASK_RUNNING 0x0000 프로세스가 CPU에서 실행중이거나 실행되려고 기다리는 중입니다. 실제 CPU에서 실행 중인 프로세스는 struct runqueues.curr란 멤버에 등록되어 있습니다. TASK_INTERRUPTIBLE #define TASK_INTERRUPTIBLE 0x0001 프로세스는 특정 조건이 true가 될 때까지 잠들


