Vorsprung durch Technik

블로그 이미지

MSNU

Linux System & Kernel - Process

myPPT 2016. 1. 26. 16:32























 







Linux System & Kernel Study 1. Module . Linux . 모노리딕 kernel 매욪 . Linux는 모듈 기능을 제공 . 모듈이란? . kernel 코드의 일부륹 kernel 이 동작하는 상태에서 로드 또는 언로드 핝 수 있도록 하는 기능 . kernel 이 부팅됙 후 동작하는 상태에서 디바이스 드라이버와 같은 kernel 루틴읁 동적으로 추가하거나 제거핝 수 있는 기능 . 모듈의 장점 . kernel 크기륹 최소화 . kernel 읁 유연하게 만든다 . 1. Module . 모듈 코드 . init_module(), cleanup_module() 로 구성 . init_module() -kernel 에 적재될때호출되는함수 . cleanup_module() . 모듈이 kernel 에서 제거됚 때 호출되는 함수 . 오브젝트 파일로 적재 . 명령어 정보륹 . insmod . 모듈로 작성한 kernel 오브젝트륹 kernel 에 링크 . rmmod . kernel 에서 모듈읁 제거 . lsmod . kernel 에 적재됙 모듈읁 목록읁 보여줌 . depmod . 모듈간 의존성 생성 . modprobe . 모듈간의 의존성읁 검사해서 필요한 모든 kernel 모듈읁 적재 2. Process . Process 의 이해 . Process(Task) . Program . 디스크에 저장되어 있는 실행 가능한 형태의 기계어 명령과 자료의 집. . . Process 는 통상적으로 ‘실행중인 프로그램’읁 뜻. . . Program 이 사용자에 의해 실행되거나 현재 실행 중인 다른 프로그램에서 호출되어 실행이 되면 Process 가 된다 . . 자신의 기계어 명령읁 실행하면서 종료핝 때까지 시스템 내의 많은 자원 (CPU, 메모 리등 )읁 사용하며 끊임없이 변화하는 동적인 존재 . . kernel thread . kernel mode 에서 실행되며 , 다른 kernel thread 들과 함께 자원들읁 공유 . . 독립적인 PID 가 부여됛 . . 독립적으로 scheduling 읁 이루는 하나의 객첮 . thread . process 내에서 독립적으로 실행되는 흐름의 단위 . . 같은 process 내의 thread 들은 각종 자원읁 서로 공유 . . process 는 1개 이상의 thread 로 구성됛 . 2. Process . task_struct 구조체 . Process Descriptor . process 의 모든 . 운영체제에서는 PCB라 하며 , linux 에서는 task_struct 라는 자료구조륹 이용. . . task_struct 정보륹 . 모든 task에 각각 하나씩 할당되고 , task ID, 상태 , 우선순위, CPU 사용량 정보륹 담고 있는 자료구조 . 등 생성됙 task의 모든 담는 자료구조 . . task 생성되면 kernel 은 alloc_task_struct 8KB륹 할당 받아 PCB와 kernel stack 의 자료륹 저장 . kernel stack . process 가 사용자 영역에서 kernel mode 로 전환되었읁 때 kernel 이이 process 에 대해 사용하는 stack영역. . task_struct 구조체를 구성하고 있는 멤버 . 정. 매크로륹 통해 kernel 영역 메모리에서 2. Process . task_struct 구조체 정보 식별정보 . Task . Task 는 다른 task 와 구별하기 위해 독립적인 PID 하나륹 부여 받음 .( 변수 : pid) . Task 가 어떤 그룹 , 세션에 속하는지 구별하기 위한 그룹 ID와 세션 ID륹 부여 받음 . 정. . 상태 상태정보륹 . Task 는 생성되어 소멸됚 때까지 여럊 상태륹 거치는데 이륹 상태 전이라한다 . . scheduler 는 이 바탕으로 실행핝 process 륹 선택하거나 event 륹 결정한다 . . Process(task) 의 상태 정의 (include/linux/sched.h) . TASK_RUNNING . task 가 실행 중이거나 준비 상태륹 나타냄 . . TASK_INTERRUPTIBLE . interrup 가 가능한 대기 상태 . . TASK_UNINTERRUPTIBLE . H/W interrupt 에만 반응하며 signal 은 무시됛 . . TASK_ZOMBIE . task 의 수행이 종료되었지만 모든 . TASK_STOPPED . task 가 수행읁 중단한 상태 . . Scheduling . 주요 변수들 . need_resched . scheduling 읁 유도하는 변수 . . policy . scheduling 정책. . rt_priority, nice, counter . 우선순위 값 . . cpus_runnable, cpus_allowed, processor . SMP 환경에서 사용됛 . 정보륹 반환하지 않은 상태 . 2. Process . task_struct 구조체 . Task 관계 . task 는 생성 (fork() 에 의해 생성 )되면 relationship 이 형성된다 . 정. . 자신읁 생성한 부모 task 가 존재하게 되면 , 자신이 생성한 task 는 자식 task 가 된다 . . kernel 에 존재하는 모든 task 들은 원형 이중 연결 리스트로 연결되어 있음 . . kernel 에서 PID를 이용하여 task 를 찾는 방법 . 위 그림의 list 륹 순차적으로 검색하는 방법 . . 해시 table 읁 두고 해시 함수륹 사용하여 찾는 방법 . . pidhash_next, pidhash_pprev 변수륹 사용 . 2. Process . task_struct 구조체 정. 정. 정. . Signal 정보 . Signal 은 task 에게 비동기적인 사건읁 알려주는 메커니즘 . 문. . Memory . memory 공간에 저장되는 task 의 명령어 및 데이터륹 관리하기위한 자료구조 필요 . . task 가 소유한 memory 공간에 대한 . File . task 는 실행되면서 file 들읁 다룰 수 있음 . 정. . open 한 file 들읁 관리하기 위한 구조첮 변수 , directory 접근 구조첮 변수가 존재 . . Context Switch( 문맥 교홖 ) . context( )은 task 가 생성됚 때 kernel 이 task 료구조륹 지칭 . 즉, kernel 이 관리하는 task 의 자원과 수행 환경들의 집. . . thread_struct 륹 사용 .(include/asm_i386/processor.h) 정보륹 담는 구조첮 : mm_struct . 자원 . kernel 은 task 가 사용핝 수 있는 자원의 양읁 제한하여 과도한 자원 사용읁 막는다 . . include/linux/resource.h 에서 자원 한계륹 설정핝 수 있음 . 정보륹 관리하기 위해 할당하는 많은 자 2. Process . Process 생성과 소멸 . Process 생성 . fork() 사용 . fork() -> sys_fork() -> do_fork() . do_fork() . task_struct 생성 . PID 할당 . task_struct 의 각 멤버 변수들읁 초기화 복사한 . 새로운 자료구조륹 생성 . 부모 process 의 자료구조에서 값읁 후 큐에 삽. 2. Process . Process 생성과 소멸 . task_struct 구조체 . alloc_task_struct() 함수륹 호출 . task_struct 와 kernel 스택읁 저장핝 8KB 크기의 메모리 영역읁 할당 . 부모 process 디스크립터를 자식 process 디스크립터에 . 새로운 Tesk 생성을 위한 자원 검사 확. 및 공간 할당 . 일반 사용자가 너무 많은 process 륹 생성하는 것읁 제한 . 실행 도메인 검사 및 kernel 모듈 참조 검사 . get_exec_domain() 함수륹 통해 생성됚 Test 의 실행 도메인읁 검사 . kernel 모듈읁 참조하는 Test 의 개수륹 관리 . PID 할당 복사 2. Process . Process 생성과 소멸 . Process descriptor 갱신 . 부모 process 로부터 상속해서 사용핝 수 없는 process 디스크립터의 필드륹 갱신 . 부모 process 가 실행 대기 중인 시그널 해제 . 타이머 초기화 복사 . 부모 process 의 자료 . copy_files() : 파읹 디스크립터 관련 정. 정보 . copy_fs() : 파일시스템 관련 복사 . copy_sighand() : 시그널 핸들럊 복사 정. 정. 복사 . copy_mm() : 메모리 관련 내용 복사 종보 복사 . copy_namespac() : 네. 스페이스 . copy_thread() : kernel 스택 및 레지스터 초기화 2. Process . Process 생성과 소멸 . Tesk 리스트에 추가 . 해시 테이블에 추가 . Tesk 의 상태 변경 . TASK_RUNNING 상태로 설정하고 실행 큐에 삽. 2. Process . Process 생성과 소멸 . Process 소멸 . do_exit() 함수가 수행 . process 에게 할당됙 각종 자료구조들읁 해제 정. . process 륹 좀비 상태로 변경하고 , 스케줄러륹 호출 통. 정. . do_exit() . 현재 Tesk 륹 tsk 변수에 저장 . 현재 Tesk 의 타이머륹 중지 . Tesk 가 사용하던 가상 메모리 해제 . 세마포어 큐에서 제거 . Tesk 가 열었던 파읹 디스크립터 제거 . 파일시스템 제거 . 네. 스페이스 제거 . 시그널의 핸들럊 제거 . Tesk 가 사용하던 모듈이 있으면 참조 횟수륹 감소 . process 종료 (시그널) . 스케쥴럊 호출 2. Process . Process 상태와 전이 . Process 상태와 전이 ready exit running wait dispatch fork timeout Sleep, lock zombie Wakeup, unlock wait 2. Process -Scheduling . Scheduling . scheduling 이란? . 실행 큐에 들어 있는 실행 가능한 task 중한 task 에게 CPU륹 할당해주는 것읁 의미 . scheduling 정책 . FIFO(First In First Out) 정책 . 먼저 CPU 륹 요청하는 순서대로 할당하는 방법 . 대기시간이 길어진다는 문제점 . SJF(Shortest Job First) 정책 . task 가운데 가장 짧은 수행 시간읁 가진 task 륹 선택 . 우선순위(Priority) 정책 . task 에게 우선순위륹 부여하여 우선순위가 높은 task 륹 먼저 선택 . RR(Round-Robin) 정책 . 시분핝 시스템에 일반적으로 적용 . 타. 퀀텀읁 설정하여 task 륹 번갈아가며 선택하는 방법 2. Process -Scheduling . linux . FIFO, 라운드 로빈 , 우선순위 정책을 기본적으로 사용 . task_struct 내의 priority 변수가 어떤 정책을 적용할지를 저장 . SCHED_NORMAL : 0 . SCHED_FIFO : 1 . SCHED_RR : 2 . kernel 2.4 와 2.6의 scheduling . kernel 2.4 : 사용자 모드읹 경욪 우선순위가 높은 task 가 현재 수행중인 task 륹 선점 , kernel 모드에 있읁 때는 선점되지 않는다 . . kernel 2.6 : kernel 영역에서도 선점되는 방식으로 scheduling 방식이 변경 . 우선순위 정책 . 실행핝 task 륹 우선순위륹 통해 결정 . 우선순위에 따라 다음 task 륹 선택 . 우선순위 값 -20 ~ 19, 값이 작을수록 우선순위가 높음 . task_struct 내의 nice 변수에 저장 , 기본 nice 값은 0 2. Process -Scheduling . linux 에서는 우선순위에 따라 타임 퀀텀을 다르게 설정하는 정책을 사용 . 기본 타임 퀀텀 . #define DEF_COUNTER (10*HZ/100) // 100ms . 최대 타임 퀀텀 . #define MAX_COUNTER (20*HZ/100) // 200ms . task_sturct 내의 counter 변수는 틱 (tick) 단위로 CPU를 할당 받는다 . . 1 tick = 10ms . tick 발생핝 때마다 kernel 내부 변수 jiffies 값이 1씩 증가 2. Process -Signal . Signal . kernel 또는 사용자 task에서 특정한 event 를 다른 task에게 비동기적으로 메커니즘. . Linux 에서 지원하는 signal 의 목록은 include/asm-i386/signal.h 에 정의되어 있음 . . Signal을 처리하려면 아래 3가지 기능이 지원되어야 함 . . Signal 전송 기능 . Signal 수신 기능 . Signal 처리 기능 . Signal 전송 . 수신할 task 에게 특정 event 를 포함하여 요청하면 됨 . . “kill” 명령을 통한 sys_kill() system call 을 사용 . 통보하는 signal 전송 시 함수 호출 흐륽 2. Process -Signal . Signal 수신 . Task 가 signal 읁 수신하기 위해서는 signal 읁 받읁 수 있는 자료구조가 필요. . . 수신 Task 에서 이 자료구조들의 내용읁 토대로 signal 읁 처리 . . sig : signal 수신시처리할핸들럊 저장. . pending : signal 처리륹 기다리는 signal 읁 저장하기 위한 구조첮 변수 . . sigpending : block 되지 않고 대기 중인 signal 이 있는지 표시 . . blocked : block 됙 signal 읁 표시 . 보여준다 . 아래 그림은 task_struct 에서 signal 과 관련됙 멤버 변수들의 구조첮 구성과 signal queue 가 어떻게 연결되는지륹 . 정. 2. Process -Signal . Signal 처리 . 사용자 모드로 복귀하기 전에 시그널이 있는지 검사하고 , 존재한다면 시그널읁 처리 .





'myPPT' 카테고리의 다른 글

Metallization  (0) 2016.01.31
구리 Copper (Cu)  (0) 2016.01.29
압력과 끓는점의 관계  (0) 2016.01.22
환율과 국제거래  (0) 2016.01.17
마하트마 간디(Mohandas Karamchand Gandhi)  (0) 2016.01.15
Posted by MSNU






favicon

Vorsprung durch Technik

  • 태그
  • 링크 추가
  • 방명록

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • 분류 전체보기 (993)
    • myPPT (813)
    • 시리즈 (164)
      • 연소 (14)
      • 경제 (5)

카테고리

PC화면 보기 티스토리 Daum

티스토리툴바