본문 바로가기

오픈소스 읽기 (OLD)20

3. Systemd 깊이보기 - systemctl 같은 카테고리의 글 보기 www.kernelpanic.kr/category/%EC%98%A4%ED%94%88%EC%86%8C%EC%8A%A4%20%EC%9D%BD%EA%B8%B0/Init%20%EC%8B%9C%EC%8A%A4%ED%85%9C%20-%20Systemd '오픈소스 읽기/Init 시스템 - Systemd' 카테고리의 글 목록 www.kernelpanic.kr systemctl는 systemd를 모니터링하고, 컨트롤하는 가장 중요한 유틸리티이다. 앞선 hedone21.tistory.com/18 포스트에서는 가장 많이 사용되는 systemctl 명령어에 대해 간단히 알아보았다면, 이번 포스트에서는 systemctl로 할 수 있는 다양한 작업들에 대해 살펴보려 한다. 용어정리 이번 포스트에서 주구장.. 2021. 3. 22.
0. 전통적인 리눅스/Unix IPC 방법들 D-Bus는 리눅스 상에서 프로세스간 통신(IPC)를 지원하는 메시지 버스 서비스이다. D-Bus를 통해서 리눅스 어플리케이션은 다른 어플리케이션들에 Broadcast를 날릴 수 있고, 또한 상대방의 PID를 알지 못하더라도 1:1 통신을 할 수 있다. 또한 D-Bus 통신은 통일성 있게 규격화된 xml 형태로 이뤄진다. 이러한 특징들을 통해서 D-Bus는 전통적인 리눅스 IPC의 한계를 극복하고, 어플리케이션 수준에서 가장 많이 사용되는 IPC 통신 방법이 되었다. D-Bus에 대해 본격적으로 살펴보기 앞서, 이번 포스트에서는 리눅스에서 전통적으로 사용되던 IPC들의 특징 및 장단점을 간단히 살펴보고, 전통적인 IPC 방법들이 공통적으로 가지고 있는 문제점에 대해서 살펴보도록 하겠다. 0.1 Unix/.. 2021. 3. 22.
2. Systemd 기본 개념잡기 (2/2) 같은 카테고리의 글 보기 www.kernelpanic.kr/category/%EC%98%A4%ED%94%88%EC%86%8C%EC%8A%A4%20%EC%9D%BD%EA%B8%B0/Init%20%EC%8B%9C%EC%8A%A4%ED%85%9C%20-%20Systemd '오픈소스 읽기/Init 시스템 - Systemd' 카테고리의 글 목록 www.kernelpanic.kr 2.3 프로세스 관리 앞 포스트에서 Init은 서비스를 실행한다고 하였다. 실행된 서비스는 항상 Init만을 부모 프로세스로 가진다. 따라서 일반적으로 우리가 쉘에서 프로그램 실행 / 종료를 하듯이 해당 서비스를 종료하거나, 재시작하기 까다롭다. (nohup, 시그널 등을 활용하면 가능하기는 하다.) 또한 쉘 프로그램에서는 서비스 프로그램.. 2021. 3. 18.
2. Systemd 기본 개념잡기 (1/2) 같은 카테고리의 글 보기 www.kernelpanic.kr/category/%EC%98%A4%ED%94%88%EC%86%8C%EC%8A%A4%20%EC%9D%BD%EA%B8%B0/Init%20%EC%8B%9C%EC%8A%A4%ED%85%9C%20-%20Systemd '오픈소스 읽기/Init 시스템 - Systemd' 카테고리의 글 목록 www.kernelpanic.kr 2.1 Systemd 특징 Systemd는 최근 가장 보편적으로 사용되고 있는 Init 프로세스이다. 예전에는 Init프로세스로 SysV가 주로 사용되었고, 우분투는 Upstart를 사용했었다. 하지만 SysV와 Upstart는 단점을 가지고 있었고, 오늘날 Systemd로 대체되었다. 그렇다면 Systemd의 무엇이 이와 같은 init의.. 2021. 3. 16.
1. Init 시스템이란 같은 카테고리의 글 보기 www.kernelpanic.kr/category/%EC%98%A4%ED%94%88%EC%86%8C%EC%8A%A4%20%EC%9D%BD%EA%B8%B0/Init%20%EC%8B%9C%EC%8A%A4%ED%85%9C%20-%20Systemd '오픈소스 읽기/Init 시스템 - Systemd' 카테고리의 글 목록 www.kernelpanic.kr 1.1 Init이란 Init은 리눅스 커널 부팅이 완료된 뒤 실행되는 첫 번째 프로세스다. 또한 동시에 Init은 커널이 직접 실행하는 유일한 프로세스다. 따라서 Init은 부모 프로세스를 가지지 않는 유일한 프로세스인 동시에, Init을 제외한 나머지 모든 프로세스의 조상이 된다. 이러한 특징으로 인해 Init은 아래와 같은 작업들을 수.. 2021. 3. 13.
4. Weston 컴포지터 살펴보기 - 컴포지팅 (3/3) 스티브 잡스는 제록스(Xerox)의 팔로알토연구센터(PARC)에서 GUI에 대한 통찰을 얻고, 최초로 PC에 GUI를 도입하게 된다. 스티브잡스 전기에 따르면 잡스와 연구원들은 GUI를 개발하면서, 창들이 겹치는 기능을 구현하느라 꽤나 애를 먹었다고 한다. 당시 컴퓨터의 처리능력을 생각해보면, 실시간으로 여러 창들을 띄우고 컴포지팅하기 위해 얼마나 많은 최적화가 들어갔을지 채 짐작도 되지 않는다. 오늘날에는 컴퓨터의 처리능력이 스티브잡스 당시와 비교할 수 없이 좋아졌다. 그럼에도 여전히 (굳이 자원을 낭비할 필요는 없기 때문에) 컴포지팅을 효율적으로 할 수 있도록 weston은 레어이와 뷰를 사용한다. 레이어 위에 있는 weston 화면을 보자. 맨 위에는 시간정보를 제공하는 패널이 보이고, 아래에 세 .. 2020. 8. 21.
3. Weston 컴포지터 살펴보기 - 화면 갱신 (2/3) Weston은 다양한 역할을 수행한다. Input handling, Keyboard shortcut, 대기상태 enter / exit 등등. 그 중 가장 중요한 역할은 Desktop GUI의 변경사항을 처리하고, 이를 표현하는 것이다. 이를 다른말로 하면, 데스크탑의 윈도우들을 컴포지팅하는 일이다. 여기서는 weston 컴포지터가 화면을 어떤 원리와 구조로 화면을 갱신하고, 컴포지팅하는지 살펴보려고 한다. Weston 컴포지터 화면 갱신 구조 weston-flower 예제를 실행하면 일정 주기마다 화면이 변한다. Desktop App(weston-flower)와 Weston 컴포지터는 화면 변화를 처리하기 위해 다음과 같은 동작을 수행한다. 앱은 Wayland 서버에 프로토콜을 보낼 수 있는 handle.. 2020. 8. 12.
2. Weston 컴포지터 살펴보기 - 메인 플로우 (1/3) Weston 컴포지터는 Weston의 동작을 준비/실행하는 핵심 컴포넌트이다. Weston 컴포넌트가 하는 일은 크게 두 가지다. 하나는 Wayland 객체, Backend 컴포넌트, Shell 컴포넌트를 생성 / 로딩하고, 실행하는 것이고, 다른 하나는 주요 Wayland Interface의 동작(= 컴포지팅)을 정의하는 일이다. Weston 컴포지터의 코드는 compositor 폴더에서 찾을 수 있으며, libweston 폴더를 참조한다. 워크플로우와 실제 소스코드를 보며, Weson compositor가 어떤식으로 동작하는지 알아보자. (자세한 설명은 코드 주석 참조) // compositor/main.c WL_EXPORT int wet_main(int argc, char *argv[]) { str.. 2020. 8. 5.
번외. Wayland 프로토콜 Wayland에서는 서버(컴포지터/쉘)과 클라이언트(어플리케이션)이 프로토콜을 기반으로 통신한다. 프로토콜은 Wayland에서 기본으로 제공하는 프로토콜과, xdg(freedesktop)에서 제공하는 de facto 프로토콜, 그리고 서드파티에서 정의한 프로토콜로 구분된다. 아래는 Wayland에서 기본으로 제공하는 프로토콜이다. 참고자료: wayland.freedesktop.org/docs/html/apa.html 프로토콜 내용 싱글톤 wl_display 가장 중요한 객체. 클라이언트 측면에서는 해당 객체를 통해 서버와 연결(cf. wl_display_connect)을 형성할 수 있다. 서버 측면에서는 wl_display가 wl_compositor를 소유하고 있다. 따라서 클라이언트에서 들어오는 데이터.. 2020. 8. 4.