2024/10/12 5

[shell script] "$*" 과 "$@"의 차이

흔히 $*와 $@를 구분 없이 많이 사용하고 있는데, 사실 약간은 다르다. 레퍼런스에 보면 아래와 같이 정의되어 있다."$*" All the positional parameters (as a single word) *"$@" All the positional parameters (as separate strings)무슨 뜻이냐면, $*는 모든 parameter를 하나의 단어로 취급한다는 의미고, $@는 별도의 문자로 취급한다는 의미다. (응?) 다시말해, $*는 입력되는 모든 parameter를 한개의 단어로 취급한다는 뜻. $@는 공백으로 구분된 별도의 문자열로 취급한다는 의미다. 아래와 같은 스크립트 코드가 있다.#!/bin/shecho "================="echo "\$@ sectio..

QEMU-KVM 기반의 안드로이드 x86 가상머신 생성(with SPICE)

안녕하세요. 이번 포스팅에서는 QEMU-KVM 기반의 안드로이드 x86 가상머신을 생성하고 SPICE 클라이언트를 통해 외부에서 GUI 기반으로 가상머신에 접속이 가능하도록 진행해보고자 합니다. 먼저 안드로이드 x86은 기존의 ARM 기반으로 많이 사용되던 안드로이드를 Intel 기반으로 포팅한 버전으로 프로젝트 명이기도 합니다. CPU 칩 자체가 틀리기 때문에 호환이 안되던 안드로이드를 Intel에서도 올릴 수 있도록 하였습니다. 따라서 이번 포스팅에서는 Ubuntu 환경에서 QEMU-KVM을 통해 가상머신을 생성하고 SPICE 서버를 통해 외부에서 가상머신을 원격 GUI 환경으로 사용할 수 있도록 하겠습니다.    1.  QEMU-KVM 기반의 안드로이드 x86 가상머신 생성(with SPICE)  ..

태스크 디스크립터: 프로세스 간 관계

1.  태스크 디스크립터: 프로세스 사이간의 관계   1.1  프로세스의 부모-자식 관계​유저 공간에서 생성한 모든 프로세스의 부모 프로세스는 init 이고 커널 공간에서 생성한 커널 스레드(프로세스)의 부모 프로세스는 kthreadd라고 했습니다. 태스크 디스크립터에서는 프로세스의 부모와 자식 관계를 상세히 알 수 있습니다. struct task_struct  *real_parent; 프로세스를 생성한 부모 프로세스의 태스크 디스크립터 주소를 저장합니다. struct task_struct *parent; 부모 프로세스를 의미합니다. real_parent 란 멤버는 해당 프로세스를 생성해준 프로세스를 의미합니다. 그런데 자식 프로세스 입장에서 부모 프로세스가 소멸된 경우 부모 프로세스를 다른 프로세스로 ..

커널 스레드

1.  커널 스레드   1.1  커널 스레드란?​커널 프로세스는 커널 공간에서만 실행하는 프로세스를 의미하며 대부분 커널 스레드 형태로 구동합니다. 커널 스레드는 리눅스 시스템 프로그래밍에서 데몬과 비슷한 일을 합니다. 데몬과 커널 스레드는 백그라운드 작업으로 실행하면서 시스템 메모리나 전원을 제어하는 역할을 수행합니다.  커널 스레드는 커널 내부에서 백그라운드로 구동하면서 커널 시스템에 도움을 주는 역할을 수행합니다. 데몬과 커널 스레드의 차이점은 보통 유저 영역와 시스템 콜을 받지 않고 동작한다는 점입니다. 리눅스 커널 개발자나 드라이버 개발자가 구현하는 경우가 많습니다.   커널 스레드의 3가지 특징    1. 커널 공간에서만 실행하며 유저 공간과 상호작용을 하지 않는다.    2. 실행, 휴면 등..

do_fork() 함수, 그리고 5.x 이후

1.  Intro    1.1  do_fork() 함수 소개​  리눅스에서 구동 중인 모든 프로세스는 _do_fork() 함수가 실행할 때 생성됩니다(kernel version 4.x까지). 프로세스는 누가 생성할까요? 리눅스 시스템에서 프로세스 생성을 전담하는 프로세스가 있습니다. 주인공은 init과 kthreadd 프로세스입니다.   유저레벨프로세스는 init 프로세스, 커널 레벨 프로세스(커널 스레드)는 kthreadd 프로세스가 생성합니다. 그런데 프로세스는 생성이 아니라 복제된다고 말할 수 있습니다.     1.2  프로세스 생성      "그러면 프로세스를 생성할 때 부모 프로세스를 복제하는 이유는 무엇일까?"    프로세스를 생성할 때 프로세스에게 필요한 리소스를 각각 할당 받으면 시간이 오..