리눅스

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

Posts

554 posts

[라즈베리파이] 스케줄링: 컨택스트 스위치(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 프로세스들과 우선 순위를 비교합니다

[라즈베리파이] 스케줄링: 선점(Preemptive)과 비선점(Non-preemptive) 스케줄링

Guillermo Austin Kim|2019년 2월 2일

커널에서 지원하는 스케줄링 방식은 크게 선점 스케줄링 방식과 비선점 스케줄링 방식으로 나눌 수 있습니다. 대부분 스케줄링하면 선점 스케줄링 방식으로 이해하는 경우가 많습니다.히지만 커널은 프로세스 상태에 따라 유연하게 두 가지 방식을 같이 적용합니다. 먼저 선점 스케줄링 동작에 대해서 살펴보겠습니다.선점이란 단어는 보통 영어로 Preemptive라고 쓰는 경우가 많습니다. 실제 개발자들은 선점이란 용어보다 Preemptive 를 더 자주 쓰기는 합니다. Preemptive 란 단어는 뭔가 점유하고 있는 것을 뺃어 버린다는 뜻이 있습니다. 조금 더 구체적으로 어떤 프로세스가 CPU를 점유하면서 실행 중인데 스케줄러가 강제로 프로세스를 CPU에서 빼내는 동작입니다. 여기서 스케줄러가 어떤 방식으로 실행

[라즈베리파이] 스케줄링(scheduling)이란 무엇일까?

Guillermo Austin Kim|2019년 2월 2일

여러분들은 리눅스 시스템이 탑재된 휴대폰이나 라즈베리파이를 쓰면 동시에 여러 프로그램을 실행할 수 있습니다. 휴대폰을 보면 다양한 프로그램이 동시에 실행하는 것을 확인할 수 있습니다. 예를 들면 브라우저를 실행하면서 음악을 듣거나 메신저를 하면서 어플리케이션을 다운로드 할 수 있습니다. 그래서 사람들은 여러 프로세스들이 동시에 CPU에서 실행한다고 느낄 수 있습니다. 하지만 CPU는 여러 개의 프로세스를 절대로 동시에 실행할 수는 없습니다. 리눅스 커널을 포함한 다양한 운영체제에서 스케줄링과 멀티 태스킹 기법이 생겨난 이유는 다음과 같습니다.CPU는 한 순간에 한 개의 프로세스의 코드만을 실행할 수 있습니다. 여러 개의 프로세스들이 효율적으로 번갈아 CPU에서 실행할 수 있게 규칙을 부여하고 프로세스들을

[라즈베리파이] 프로세스: 태스크디스크립터(프로세스 실행 시각 정보)

Guillermo Austin Kim|2019년 1월 31일

태스크 디스크립터에는 프로세스 실행 시각 정보를 알 수 있는 멤버들이 있습니다. u64 utime; 유저 모드에서 프로세스 실행한 시각을 표현합니다. 이 멤버는 account_user_time() 함수 6번째 줄 코드에서 변경됩니다.1 void account_user_time(struct task_struct *p, u64 cputime)2 {3 int index;45 /* Add user time to process. */6 p->utime += cputime; u64 stime; 커널 모드에서 프로세스가 실행한 시각을 표현합니다. 이 멤버는 다음 코드와 같이 account_system_index_time() 함수에서 변경됩니다.1 void account_system_index_time(s