본문 바로가기

Linux(Centos or RHEL)/RHEL 기초

(14)
프로세스를 TASK_RUNNING(CPU 실행) 상태로 바꾸는 함수...? 프로세스를 TASK_UNINTERRUPTIBLETASK_RUNNING(CPU 실행) 상태로 바꿀 때 호출되는 함수들에 대해서 공부를 해 보았습니다. 커널 버전은 v2.6.39.4 입니다. http://rousalome.egloos.com/10003491 [리눅스커널] 스케줄링: TASK_RUNNING(CPU 실행)로 바뀔 때 호출되는 함수 TASK_RUNNING(CPU실행)로 바뀔 때 호출하는 함수 분석 프로세스 상태를 CPU실행(TASK_RUNNING)으로 변경하는 함수는 1개 밖에 없습니다. __schedule() 함수를 실행할 때 프로세스는 CPU를 점유하면서 실행하는 상태로 바뀝니다. __schedule() 함수 코드를 살펴봅시다. [https://elixir.bootlin.com/ rousalo..
linux에서 likely와 unlikely란? 리눅스 소스코드를 보다 보면 조건문에서 가끔씩 likey()와 unlikely()를 볼 수 있습니다. 프로그램에서의 조건문은 굉장히 중요한 것인데, 어떻게 동작하는 것인지는 알아야겠다는 생각이 들어서 한번 찾아 봤습니다. likely()와 unlikely()는 “include/linux/compiler.h“에 정의되어있습니다. 얼핏 보면 반대의 동작을 하는 것 같은 느낌이 듭니다. # define likely(x) __builtin_expect(!!(x), 1) # define unlikely(x) __builtin_expect(!!(x), 0) [https://elixir.bootlin.com/linux/v2.6.39.4/source/include/linux/compiler.h#L115] 자 그럼 실제..
sleep과 wait의 차이? wait는 지정한 프로세스의 자식 프로세스를 포함해서 프로세스들의 작업이 끝나기를 기다리는 것이고, sleep은 프로세스를 정해준 시간만큼 잠시 멈추는 것입니다. sleep의 예시 [root@centos77 ~]# sleep 3 # 여기서 3초간 정지 [root@centos77 ~]# sleep 3& [1] 5204 [root@centos77 ~]# [1]+ Done sleep 3 [root@centos77 ~]# wait의 예시 [root@centos77 ~]# sleep 10 & [1] 5205 [root@centos77 ~]# sleep 20& [2] 5214 [root@centos77 ~]# sleep 30& [3] 5216 [root@centos77 ~]# wait %1 %2 %3 [1] Don..
프로세스를 TASK_UNINTERRUPTIBLE 상태로 바꾸는 함수...? 프로세스를 TASK_UNINTERRUPTIBLE 상태로 바꿀 때 호출되는 함수들에 대해서 공부를 해 보았습니다. 커널 버전은 v2.6.39.4 입니다. 아래 블로그를 참고하였습니다. http://rousalome.egloos.com/10003493 [리눅스커널] 스케줄링: TASK_INTERRUPTIBLE 상태로 바뀔 때 호출되는 함수 TASK_UNINTERRUPTIBLE 상태로 바뀔 때 호출하는 함수 분석 다음 함수가 호출될 때 프로세스 상태를 TASK_UNINTERRUPTIBLE로 바꿉니다.  io_wait_event()  mutex_lock()  usleep_range()  msleep()  wait_for_completion() io_wait_eve rousalome.egloos.com ..
프로세스를 TASK_RUNNING(실행 대기) 상태로 바꾸는 함수...? TASK_RUNNING(실행 대기)로 바뀔 때 호출되는 함수들에 대해서 공부를 해 보았습니다. 아래 블로그를 참고하였습니다. http://rousalome.egloos.com/10003490 [리눅스커널] 스케줄링: TASK_RUNNING(실행 대기)로 바뀔 때 호출되는 함수 - p TASK_RUNNING(실행 대기)로 바뀔 때 호출하는 함수 분석 프로세스가 다음과 같은 동작을 수행할 때 실행대기(TASK_RUNNING) 상태로 바꿉니다.  프로세스를 깨울 때  프로세스를 처음 생성하고 실행 요청을 할 때  프로세스 관련 정보를 업데이트 할 때 보통 휴면 중에 있는 프로세스를 깨우면 프로세스는 실행대기(TASK_RUNNING)상 rousalome.egloos.com 프로세스의 상태를 TASK_RUN..
프로세스? 1.1 멀티태스크 리눅스 커널은 멀티태스킹을 지원한다. 이를 이용하여 동시에 여러 프로세스를 동시에 실행하고, 교대로 시스템의 자원을 사용할 수 있게 합니다. 동시에 라고는 하지만, 일정 시점에 시스템에 탑재되어있는 CPU의 수 이상으로 프로세스를 실행하는 것은 불가능합니다. 1.2 프로세스란? 프로세스는 컴퓨터 내에서 실행중인 프로그램의 인스턴스입니다. 하지만 프로세스가 실행 중인 프로그램 코드만을 뜻하는 것은 아닙니다. 조금 더 구체적으로 설명하면 사용 중인 파일, 대기 중인 시그널, 커널 내부 데이터, 프로세서 상태, 하나 이상의 물리적 메모리 영역이 할당된 메모리 주소 공간, 실행중인 하나 이상의 스레드 정보, 전역 데이터가 저장된 데이터 부분 등 모든 자원을 포함 하는 개념입니다. 따라서 다시 ..