[라즈베리파이] 워크큐(Workqueue) - 워크(struct work_struct) 란
By Guillermo Austin Kim | 2018년 8월 24일 |
리눅스 커널에서 work라고 부르나 워크(struct work_struct)로 명시 하겠습니다. 워크란 무엇이고 어떤 동작을 할까요? 워크는 워크큐 실행 단위이며 워커 쓰레드에서 실행합니다. 커널 후반부 처리 기법으로 워크큐를 많이 쓴다고 했는데 워크가 바로 후반부 처리를 합니다. 워크가 어떻게 동작하는지 이번 장에서 코드를 분석하면서 상세히 알아볼 예정입니다. struct work_struct 구조체워크를 표현하는 자료구조는 무엇일까요? 정답은 struct work_struct 이며 다음 코드와 같습니다.[https://elixir.bootlin.com/linux/v4.14.43/source/include/linux/workqueue.h]1 struct work_struct {2 atomic_long
[리눅스커널] 동기화: 스핀락과 뮤텍스 기법 차이점 알아보기
By Guillermo Austin Kim | 2019년 9월 14일 |
이번에는 스핀락과 뮤텍스의 자료구조와 함께 두 기법의 차이점을 살펴보겠습니다. 스핀락과 뮤텍스의 구현 방식의 차이점은 다음과 같습니다. 스핀락은 코드가 간결합니다. 다른 프로세스가 스핀락을 누군가 획득하고 있으면 밖에서 계속 기다리는 동작입니다. 뮤텍스는 스핀락에 비해 코드 복잡도가 높습니다. 다른 프로세스가 뮤텍스를 획득하면 휴면에 들어가고 깨어나는 추가 동작을 하기 때문입니다. 스핀락은 아키텍처에 의존적인 코드로 구현됐습니다. 대신 뮤텍스는 아키텍처에 의존적이지 않은 리눅스 커널 함수로 구현됐습니다. 이번에도 화장실에서 B 프로세스가 기다리는 상황을 그리면서 두 기법의 차이점을 알아보겠습니다. 자물쇠(락)가 잠겼는지 알아보는 방법 기법 특징스핀락: 스핀락 구조체 중 owner와 next 필드가
[Docker] 컨테이너 내에서 외부 호스트의 API 이용하기
By 지훈현서 | 2020년 6월 22일 |
오랫만에 글을 올립니다.이번에는 같이 일을 하고 있는 동료가 요청한 내용인데필요에 따라 도커 이미지를 미리 다 만들어 놓은 상태에서컨테이너를 새롭게 더 띄우거나 하는 것을 외부에서가 아니라내부 컨테이너에서 해야 하는 필요가 생겼습니다. 해당 내용을 리서치하고 우분투 서버 20.04에서 테스트해 보았습니다. 다음은 그 내용입니다. 우선 결론적으로 다음과 같은 docker-compose.yaml 을 만들었습니다. version: "3.1"services: my-service: image: python:3.8-buster container_name: pydocker environment: - DOCKER_HOST=tcp://docker-socket-proxy:2375 com
[리눅스커널][시스템콜] 전처리 코드에서 시스템콜 핸들러 확인하기
By Guillermo Austin Kim | 2019년 2월 21일 |
전처리 코드에서 시스템 콜 핸들러 확인하기이번에는 전처리 코드에서 실제 시스템 콜 핸들러 구현부를 찾아보겠습니다. sys_read() 시스템 콜 핸들러를 찾으려면 다음 명령어을 입력하면 됩니다.root@raspberrypi:/home/pi/RPi_kernel_src/linux #egrep -nr SYSCALL_DEFINE * | grep read...fs/read_write.c:566:SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count) 시스템 콜 핸들러는 SYSCALL_DEFINE으로 시작하는 매크로로 선언됐으니 이 매크로로 검색하고 grep 명령어로 지정한 이름이 포함된 결과를 출력하면 되는 것입니다. 이전 절에서 시