리눅스

포스트: 554|조회수: 0|TERM
Items

Posts

554 posts

[라즈베리파이] 스케줄링: 프로세스 상태 변화 관리

Guillermo Austin Kim|2019년 2월 6일

프로세스 상태 변화프로세스 상태 변화에 대해 알아보겠습니다. 프로세스 상태를 아는 것 보다 프로세스 상태가 변경될 때 세부 동작을 이해하는 것이 더 중요합니다. [1] 실행 대기 -> CPU실행 중프로세스가 생성된 다음 바로 TASK_RUNNING(실행 대기) 상태로 바뀌면서 자신을 런큐에 Enqueue 합니다. 스케줄러가 RUNNING_TASK(실행 대기) 프로세스 중에서 우선 순위가 가장 높은 프로세스를 선택한 다음 CPU에서 실행시킵니다. 프로세스가 CPU를 점유하면서 실행하기 위해서 먼저 TASK_RUNNING 상태로 변경해야 합니다. 실행 후보 프로세스 리스트가 되는 것입니다. 스케줄러에 의해 선택되기 위해 런큐에 Enqueue된 다음 실행 대기 상태를 관리하는 연결 리스트에 등록하는 것

[라즈베리파이] 스케줄링: 프로세스 상태 관리

Guillermo Austin Kim|2019년 2월 6일

프로세스를 효율적으로 관리하기 위해서 커널은 프로세스에게 프로세스 상태를 부여합니다. 커널에서 정의한 프로세스 상태는 다음과 같습니다.[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.

4.8 스레드 정보(struct thread_info)

Guillermo Austin Kim|2019년 2월 3일

프로세스 상세 정보를 저장하는 자료구조는 태스크 디스크립터입니다. 이와 더불러 프로세스 세부 실행 정보를 저장하는 struct thread_info 자료구조가 있습니다. 커널이 프로세스를 생성할 때 프로세스마다 고유한 스택 공간을 부여합니다. 스택 최상단 주소에 struct thread_info 구조체 필드가 저장돼 있습니다. 이 구조체 필드는 커널이 프로세스를 제어할 때 필요한 중요 정보를 담고 있습니다.+ 프로세스 컨택스트 정보+ 선점 스케줄링 여부+ 컨택스트 스위칭 시 저장한 레지스터 세트 이번 절에서는 프로세스 동작을 표현하는 struct thread_info 구조체에 대해서 알아봅시다. struct thread_info 구조체 각 멤버에 대해 알아보기 전에 이 구조체가 프로세스 어느 주소에 위

[라즈베리파이] 스케줄링: 런큐란 무엇일까?

Guillermo Austin Kim|2019년 2월 3일

CPU를 점유하면서 실행하고 있는 프로세스는 딱 한 개인데 다수의 프로세스들은 실행 대기 상태에 있습니다. 커널은 스케줄링으로 여러 개의 실행 대기 프로세스 중에서 하나 프로세스를 선택합니다. 리눅스 시스템에서는 여러 개 프로세스들이 동시 다발적으로 실행 요청을 합니다. 따라서 여러 개의 실행 대기 상태에 있는 프로세스를 식별하고 관리할 수 있는 자료 구조가 필요합니다. 실행 대기 상태 프로세스와 CPU에서 실행 중인 프로세스를 관리하는 자료구조를 런큐라고 말합니다. 런큐가 여러 개 프로세스들로부터 실행 요청을 받아 관리를 해주니 스케줄러가 편하게 스케줄링을 할 수 있는 것입니다. 런큐는 per-cpu 타입 변수입니다. 즉, CPU 갯수만큼 주소 공간이 있다는 의미입니다.라즈베리파이는 CPU가 4개