임베디드/리눅스 커널

Process

twoweeks-within 2025. 3. 13. 17:06

process ~= Task

HDD -> 메모리에 로드 후 OS가 관리하는 단위

(소스코드,등등)

 

멀티쓰레딩 : 리눅스 -> 메모장 + vi에디터 + ..

 

Task(process)의 속성을 담은 구조체 -> task_struct

 

Thread : user 가 생성한 가벼운 process

            : context switching (Task 전환) 시간 down

            : 소속 process 내에 주소공간 ( 전역변수,파일 등)을 공유 

 <> Kernel 에서는.. 쓰레드, process 동등하게 관리

                             > task_struct 에서 thread 그룹인지 정도만 확인

명령어 ps : 터미널 내 process 확인 // PID : process ID

ps -ejH : process 계층구조 // sshd: d(demon) // bash : 명령어 입력가능상태

 

init_task(구조체) : process 들의 연결리스트(포인터)

 

kthread : kernel 안에서만 돌아가는 process들

 

PID

   0: swapper

   1: init // systemd (라파4)

   2: kthread  

 

OS 도 결국 HDD,SDD 에 저장되어있는 Program

  > 메모리에 올려서 사용

    > C/C++ : 메모리 접근 O -> OS(kernel)의 주소를 잘못 건들면 disaster !

>> 

level 로 구분

User    : Kernel level 접근 x

                > systemCall :  kernel 내 함수 사용 // 미리 kernel 내에서 정의 (sys.c)

Kernel :  All 메모리 접근 // 주의

 

 

 process 생성

ALL  process는 kernel 에서 생성 

  > kernel_clone() : 생성 및 초기화

      > 메모리 복사(복제) 

        // 새로 똑같이 생성시에는 시간 소모큼

        // ~= (메모리 할당) 자주쓰는 구조체는 미리 만들고 주소로 넘겨서 빠른 접근 

 

level 별 kernel_clone() call 하는 process

user : init process

kernel : kthread process 

 

USER :  glibc ( GNU 제공 프로세스 생성 lib) -> 커널에게 process 생성 요청 (systemcall)

  > 

  fork()    -> sys_fork (요새는 sys_clone)

  clone()  -> sys_clone                           

  vfork()   -> sys_vfork

  Kernel_thread ( KERNEL) 

 >> do _fork() -> copy_process -> kernel_clone()

 

1. fork(), clone(),vfork() 까지만 USER LEVEL -> 나머지는 다 kernel

2. sys_clone() : 다양한 flag 사용하여 프로세스 생성 가능 -> #ifdef 문 여러개 -> sys_clone !

    > ifdef 문 너무 많아서 걸러내기

     > 프로세스를 만들거나 쓰레드를 만들 수도 있음

       > process : 부모와 독립된 메모리공간

      <> thread  : 부모와 공유된 메모리공간

    > USER level 에서는 주로 fork()를 사용

// STM32 RTOS : Task() , thread() 로 user level 에서 process , thread 생성,실행 > RTOS kernel 에서 관리

   

/*

1 :전처리 파일 pwd 로 디렉터리 확인

2 : ./build_prepross.sh 전처리할 파일

3. /out/kernel/fork.i 에서 확인

    > 정렬은 gpt가..

 

 

 

'임베디드 > 리눅스 커널' 카테고리의 다른 글

Process-2  (0) 2025.03.22
trace32, Driver분석  (0) 2025.03.13
ftrace  (0) 2025.02.26
중간정리..  (0) 2025.02.24
1. 커널  (0) 2025.02.17