리눅스

포스트: 556|아이템:리눅스(554)
Tags

Posts

556 posts

[리눅스커널] 프로세스 상태: 언제 TASK_RUNNING 변경할까?

Guillermo Austin Kim|2019년 1월 7일

이번 시간에 프로세스를 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번째 줄

[라즈베리파이] 동기화 - 스핀락(spinlock) Deadlock으로 생기는 문제

Guillermo Austin Kim|2019년 1월 6일

스핀락 코드를 잠깐 살펴봤는데 뮤텍스와 다르게 상당히 코드 복잡도가 낮습니다. tickets.next과 tickets.owner 두 값으로 스핀락을 획득하는 순서를 콘트롤하죠. spin_lock 함수가 처음 실행되는 시점에 tickets.owner 값을 로컬 변수에 저장하고 전역 tickets.next 값이 업데이트 될 때까지 Busy-wait합니다. 여기서 중요한 포인트는 tickets.owner 값을 로컬 변수 즉 스택 메모리 공간에 저장해서 제어한다는 점입니다. 모든 프로세스들은 각각 스택 공간에서 돌기 때문에 ticket 스핀락을 획득한 순서를 정확하게 파악할 수 있습니다. 낮은 복잡도에 정확하기 까지 합니다. 이렇게 스핀락 함수는 빠른 시간 내에 실행돼야 하는 인터럽트 서비스 루틴에서 공유 데이

천체 관측 프로그램 “스텔라리움”

소인배(小人輩).com|2019년 1월 5일

천체 관측 프로그램 “스텔라리움” 바쁜 현대사회를 살아가다 보면, 간혹 주변의 경치를 돌아볼 수 있는 여유조차 가질 수 없는 경우가 많습니다. 낮에도 이렇게 하늘을 올려다보기 힘든데, 밤에 별자리를 보겠다고 하늘을 올려다보는 일은 더욱더 하기 힘들지 않을까 하는 생각이 드는 시대입니다. 게다가 혹시나, 밤하늘의 별자리를 확인할 수 있는 여유가 생겼다고 하더라도, 대기 환경이 옛날만큼 좋지 않기에 하늘의 별자리를 보는 것도 쉽지 않은 시대가 되기도 했..

[라즈베리파이] 가상 파일시스템 동작 분석(유저 프로세스 입장)

Guillermo Austin Kim|2019년 1월 3일

이번에 유저 어플리케이션 입장에서 가상 파일시스템 동작을 살펴보겠습니다. 먼저 유저 공간에서 실행하는 다음 코드를 같이 작성해 봅시다.1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 89 #define FILENAME_NAME "/home/pi/sample_text.text"1011 int main() 12 { 13 int fd = 0;14 ssize_t read_buf_size;15 off_t new_file_pos;