라즈베리파이

포스트: 191|조회수: 0|ARTIFACT
Items

Posts

191 posts

[라즈베리파이] 프로세스 생성: _do_fork() copy_process() 함수 분석

Guillermo Austin Kim|2019년 1월 17일

이전 시간까지 유저 프로세스와 커널 프로세스가 어떤 흐름으로 생성되는지 살펴봤습니다.둘 다 _do_fork() 함수를 호출한다는 사실을 알 수 있습니다. 프로세스 생성 시 공통으로 실행하는 _do_fork() 함수 코드를 분석하면서 커널이 어떻게 프로세스를 생성하는지 살펴봅니다. _do_fork() 함수_do_fork() 함수을 분석하기 앞서 이 함수 동작을 분류해봅시다. 1단계: 프로세스 생성copy_process() 함수를 호출해서 프로세스를 생성합니다. 프로세스를 생성하는 세부 동작을 파악하려면 copy_process() 함수를 분석할 필요가 있습니다. 2단계: 생성한 프로세스 실행 요청copy_process() 함수를 호출해서 프로세스 생성을 마쳤으면 wake_up_new_task() 함수를

[라즈베리파이] 프로세스: 커널 스레드는 어떻게 생성하나?

Guillermo Austin Kim|2019년 1월 13일

이번에는 커널 스레드 생성 요청과 커널 스레드를 생성하는 코드 흐름을 살펴봅시다. 커널 스레드를 생성하려면 다음과 같이 kthread_create() 함수를 호출해야 합니다.1 #define kthread_create(threadfn, data, namefmt, arg...) \2 kthread_create_on_node(threadfn, data, NUMA_NO_NODE, namefmt, ##arg)34 struct task_struct *kthread_create_on_node(int (*threadfn)(void *data),5 void *data, int node,6 const char namefmt[],7 ...) 먼저 이 함수에 전달하는 인자부터 살펴봅시다.

[리눅스] 리눅스 시스템에서 메모리가 부족할 때

Guillermo Austin Kim|2019년 1월 10일

OOM의 기본적인 원인은 간단합니다. 즉, 여러분은 사용 가능한 가상 메모리 공간보다 더 많은 것을 요구했을 것입니다.여기서 "가상"이라고 말한 이유는 RAM이 free 메모리로 계산되는 유일한 공간이 아니며 어떠한 스왑 영역도 해당되기 때문입니다. OOM 조사하기 OOM 조사를 시작하기 위해 먼저 대량의 메모리 블록을 할당하는 아래의 코드를 입력하고 실행시킵니다: #include #include #define MEGABYTE 1024*1024 int main(int argc, char *argv[]){ void *myblock = NULL; int count = 0; while (1)

[라즈베리파이] 프로세스: 컨택스트 스위칭 이란

Guillermo Austin Kim|2019년 1월 9일

마운드에 A란 투수가 있습니다.마운드에는 투수 한 명만 공을 던질 수 있습니다. 그런데 마운드에 오르고 싶어하는 B, C란 투수가 불펜에서 몸을 풀고 있습니다. 감독은 마운드에서 혼자 공을 던지고 있는 A란 투수가 불펜에 있는 B, C 투수보다 잘 던지는지 꾸준히 모니터링합니다. 시간이 흘러 감독이 B란 투수틀 마운드에 올려야 겠다고 결단을 내렸습니다. 감독은 마운드에 있는 A 투수를 마운드에서 내리고 B 투수를 마운드에 올립니다. 컨택스트 스위칭에 대한 이해를 돕기 위해 잠깐 야구에서 투수 교체에 대해 설명을 했습니다. 그럼 다시 컨택스트 스위칭에 대한 설명으로 되돌아 가겠습니다. 사용자 입장에서 컴퓨터나 휴대폰에서 여러 프로그램을 동시에 실행할 수 있습니다.프로그램을 구성 중인 프로세스도 동