[리눅스커널] 동기화: 스핀락(spinlock)을 쓰는 예제 코드 살펴보기
By Guillermo Austin Kim | 2019년 9월 11일 |
스핀락을 표현하는 구조체를 확인했으니 스핀락을 어떤 방식으로 획득하고 해제하는지 살펴보겠습니다. 예제 코드를 보기 전에 spin_lock() 함수와 spin_unlock() 함수의 선언부를 소개합니다. 이번에는 스핀락을 획득할 때 쓰는 spin_lock()와 함수의 선언부를 보겠습니다.static __always_inline void spin_lock(spinlock_t *lock); 입력 인자는 포인터 타입 lock 변수이며 spinlock_t 구조체입니다. 함수 선언부가 void이니 반환 값은 없습니다. __always_inline 매크로로 선언했으니 커널 함수 내에서 자주 호출되는 함수임을 알 수 있습니다. 다음은 스핀락을 해제할 때 쓰는 spin_unlock()와 함수의 선언부를 봅시다
리눅스 VNC 원격접속(x11vnc, remmina) 관련 참고사항
By 반달가면 | 2021년 10월 13일 |
리눅스(데비안/우분투 계열)에서의 VNC 원격접속 사용은 이전에 정리한 게시물을 참고하자. 아래의 링크다. 리눅스(데비안/우분투 계열)에서 VNC 원격접속 사용 (x11vnc, remmina) 위의 게시물에 나온 내용에 추가해서 참고할 점을 정리해 둔다. 우선 ssh 터널을 통해서 VNC 서버(x11vnc)를 실행할 때(관련 내용은 위의 이전 게시물을 참고하자) -display 옵션에 지정할 디스플레이 번호는 아래의 명령으로 확인할 수 있다. echo $DISPLAY 결과는 통상 ":0" 또는 ":0.0"이라고 나올 것이다. 여기에 맞춰서 -display 옵션을 지정해 주면 되겠다. 만약 ":0.0"이라면 클라이언트쪽에서 서버에 ssh 터널을 아래와 같이 만들고 x11vnc
리눅스에서 pdf 파일 분할하기
By 반달가면 | 2017년 7월 10일 |
얼마전에 좀 용량이 큰 pdf 파일을 여러개의 작은 pdf 파일로 분할해서 저장해야 하는 상황이 있었는데, 리눅스에서 깔끔하게 해결이 가능했다. 알고 보면 아무것도 아닌데, 그 당시에 당장 생각이 나지 않아서 고민을 좀 했었기에 여기에 적어 두기로. 우분투, 리눅스 민트 등 데스크탑 리눅스 배포판에 같이 들어 있는 문서 뷰어나 에디터에서 "인쇄" 메뉴로 가 보면 아주 요긴한 기능을 볼 수 있는데, 바로 "파일로 인쇄하기(print to file)"다. 파일 형식은 pdf, ps, svg 등을 지원한다. 분할하고 싶은 파일을 뷰어로 연 후에 인쇄 메뉴로 가서 인쇄할 페이지 범위와 파일명을 지정하고 pdf 파일로 저장하면 된다. 별도의 패키지를 설치할 필요도 없이 가뿐하게 해결되었다.
[라즈베리파이] 프로세스: 태스크 디스크립터(프로세스 관계)
By Guillermo Austin Kim | 2019년 1월 29일 |
이전 시간에 유저 공간에서 생성한 모든 프로세스의 부모 프로세스는 init 이고 커널 공간에서 생성한 커널 스레드(프로세스)의 부모 프로세스는 kthreadd라고 했습니다. 태스크 디스크립터에서는 프로세스의 부모와 자식 관계를 상세히 알 수 있습니다. struct task_struct *real_parent; 프로세스를 생성한 부모 프로세스의 태스크 디스크립터 주소를 저장합니다. struct task_struct *parent; 부모 프로세스를 의미합니다. real_parent 란 멤버는 해당 프로세스를 생성해준 프로세스를 의미합니다. 그런데 자식 프로세스 입장에서 부모 프로세스가 소멸된 경우 부모 프로세스를 다른 프로세스로 지정합니다. 프로세스 계층 구조에서 지정한 부모 프로세스가 없을 경우 in