커널

포스트: 228|조회수: 0|CIVILIZATION
Items

Posts

228 posts

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

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개

[라즈베리파이] 스케줄링: 컨택스트 스위치(Context Switch)이란

Guillermo Austin Kim|2019년 2월 2일

CPU에서 실행 중인 프로세스를 비우고 새로운 프로세스를 CPU에서 실행시키는 과정을 컨택스트 스위칭이라고 합니다. 컨택스트 스위치란다음 그림을 보면서 컨택스트 스위칭란 용어에 대해서 살펴봅시다. CPU에서 E란 프로세스가 실행 중이라고 가정합시다. 어떤 프로세스가 CPU에서 실행 중이란 의미는 CPU 레지스터 세트에 프로세스 실행 정보가 채워져 있다는 의미입니다. 어떤 코드가 실행 중이란 의미는 ARM 코어 PC(프로그램 카운터)에 현재 실행 중인 주소를 가르키고 있다는 것입니다. E란 프로세스는 계속 ARM 코어에서 실행을 하려고 하지만 A, B, C, D 프로세스들이 실행 요청을 합니다. 스케줄러는 ARM 코어에서 실행 중인 E란 프로세스와 A, B, C, D 프로세스들과 우선 순위를 비교합니다