[리눅스커널] 동기화 - 유저 프로세스 시스템 콜 호출 시 레이스 컨디션
By Guillermo Austin Kim | 2018년 10월 3일 |
유저 공간에서 생성된 프로세스는 여러 개 쓰레드를 생성합니다. 이 쓰레드들이 같은 디바이스 노드에 접근해서 시스템 콜을 발생하며 커널과 통신합니다. fork() 라는 함수를 유저 공간에서 시스템 콜로 호출하면 유저 공간에서 sys_clone()이란 함수 호출로 프로세스를 생성합니다. 유저 공간에서 open(), write() 그리고 ioctl() 이란 함수를 호출하면 이에 대응하는 시스템 콜을 호출해서 커널 공간과 통신합니다. 이번에는 시스템 콜 관련 함수에서 발생한 레이스 컨디션을 확인합니다. 먼저 패치 코드를 소개하겠습니다.1 diff --git a/kernel/exit.c b/kernel/exit.c2 --- a/kernel/exit.c3 +++ b/kernel/exit.c4 @@ -760,10 +
[리눅스커널] 인터럽트 후반부 처리: IRQ 스레드 생성 예제 코드 분석
By Guillermo Austin Kim | 2019년 2월 9일 |
이번에는 IRQ 스레드를 생성하는 예제 코드를 소개합니다. 실제 request_threaded_irq() 함수를 호출해서 IRQ 스레드를 생성하는 과정을 살펴보겠습니다. 분석할 코드는 다음과 같습니다.[https://elixir.bootlin.com/linux/v4.14.30/source/drivers/usb/dwc3/gadget.c]1 static int dwc3_gadget_start(struct usb_gadget *g,2 struct usb_gadget_driver *driver)3 {4 struct dwc3 *dwc = gadget_to_dwc(g);5 unsigned long flags;6 int ret = 0;7 int irq;89 irq = dwc->irq_gadget;1
[라즈베리파이] Process - 대기큐(Wait queue)- (1)
By Guillermo Austin Kim | 2018년 9월 14일 |
대기 큐(wait queue) 소개대기 큐는 커널에서 여러 용도로 사용합니다. 특히 인터럽트 핸들링과 프로세스 동기화, 타이밍으로 씁니다. 프로세스는 디스크 연산이 끝나기를 기다리거나, 시스템 리소스가 해제되기를 기다리며 시간이 얼마간 흐르길 기다려야 할 때가 있습니다 대기 큐는 여러 이벤트에 대한 조건부로 대기를 구현하고 표현합니다. 특정 이벤트를 기다리는 프로세스는 적절한 대기 큐에 자기 자신을 넣고 CPU 제어를 포기합니다. 그러므로 대기 큐는 잠자고 있는 프로세스들이 모여있는 장소라고 볼 수 있습니다. 이 프로세스들은 특정 조건이 true가 되면 커널이 깨워줍니다. 대기 큐는 이중 링크드 리스트로 구현되어 있으며, 이 리스트의 각 개체에는 프로세스 디스크립터를 가리키는 포인터가 들어있습니다. 대
GoodSync 10으로 무료 업그레이드
By 흥겨워져라~ 나의 삶아! | 2016년 11월 23일 |
작년 9월에 구입해서 아주 잘 쓰고 있는 GoodSync!! 메일이 한 통 와서 구글 번역기로 돌려봤는데, 내용이 아래와 갔더라. 무료 업그레이드를 받으실 수 있습니다.2015 년 1 월 1 일 이후에 GoodSync를 구입 한 경우,GoodSync 10으로 무료 업그레이드 할 수 있습니다.다른 모든 GoodSync Pro 사용자는라이선스 당 $ 19.95부터 시작하는GoodSync 10의 할인 된 업그레이드를 받을 수 있습니다. 업그레이드 방법은 구입 당시 영문 이름과 오더 아이디를 써넣으면 된다. 이것만으로 쉽게 업그레이드가 된다. 새로 업그레이드 된 인터페이스는 윈도우 10 테마와 같다. 여러모로 편리하게 바뀐 인터페이스는 무척 마음에 든다. GoodSync를 구입하신 분이라면