html5-img
1 / 20

Linux System & Kernel Study_03

Linux System & Kernel Study_03. 도성준 , 차재우. 1. Module. Linux – 모노리딕 kernel Linux 는 모듈 기능을 제공 모듈이란 ? kernel 코드의 일부를 kernel 이 동작하는 상태에서 로드 또는 언로드 할 수 있도록 하는 기능 kernel 이 부팅된 후 동작하는 상태에서 디바이스 드라이버와 같은 kernel 루틴을 동적으로 추가하거나 제거할 수 있는 기능 모듈의 장점 kernel 크기를 최소화

kapono
Download Presentation

Linux System & Kernel Study_03

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Linux System & Kernel Study_03 도성준, 차재우

  2. 1. Module • Linux– 모노리딕kernel • Linux는 모듈 기능을 제공 • 모듈이란? • kernel 코드의 일부를 kernel이 동작하는 상태에서 로드 또는 언로드 할 수 있도록 하는 기능 • kernel이 부팅된 후 동작하는 상태에서 디바이스 드라이버와 같은 kernel 루틴을 동적으로 추가하거나 제거할 수 있는 기능 • 모듈의 장점 • kernel 크기를 최소화 • kernel을 매우 유연하게 만든다.

  3. 1. Module • 모듈 코드 – init_module(), cleanup_module()로구성 • init_module() - kernel에 적재될 때 호출 되는 함수 • cleanup_module() – 모듈이 kernel에서 제거될 때 호출되는 함수 • 오브젝트 파일로 적재 • 명령어 • insmod – 모듈로 작성한 kernel 오브젝트를 kernel에 링크 • rmmod – kernel에서 모듈을 제거 • lsmod – kernel에 적재된 모듈을 목록을 보여줌 • depmod – 모듈간 의존성 정보를 생성 • modprobe – 모듈간의 의존성을 검사해서 필요한 모든 kernel 모듈을 적재

  4. 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로 구성됨.

  5. 2. Process – task_struct구조체 • Process Descriptor • process의 모든 정보를 담고 있는 자료구조. • 운영체제에서는 PCB라 하며, linux에서는 task_struct라는 자료구조를 이용함. • task_struct • 모든 task에 각각 하나씩 할당되고, task ID, 상태 정보, 우선순위, CPU 사용량등 생성된 task의 모든 정보를 담는 자료구조. • task 생성되면 kernel은 alloc_task_struct매크로를 통해 kernel 영역 메모리에서8KB를 할당 받아 PCB와 kernel stack의 자료를 저장 • kernel stack – process가 사용자 영역에서 kernel mode로 전환되었을 때 kernel이 이 process에대해 사용하는 stack영역. • task_struct구조체를 구성하고 있는 멤버.

  6. 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 환경에서 사용됨.

  7. 2. Process – task_struct구조체 • Task 관계 정보 • task는 생성(fork()에 의해 생성)되면 relationship이 형성된다. • 자신을 생성한 부모 task가 존재하게 되면, 자신이 생성한 task는 자식 task가 된다. • kernel에 존재하는 모든 task들은 원형 이중 연결 리스트로 연결되어 있음. • kernel에서 PID를 이용하여 task를 찾는 방법 • 위 그림의 list를 순차적으로 검색하는 방법. • 해시 table을 두고 해시 함수를 사용하여 찾는 방법. • pidhash_next, pidhash_pprev변수를 사용.

  8. 2. Process – task_struct구조체 • Signal 정보 • Signal은 task에게 비동기적인 사건을 알려주는 메커니즘. • Memory 정보 • memory 공간에 저장되는 task의 명령어 및 데이터를 관리하기위한 자료구조 필요. • task가 소유한 memory 공간에 대한 정보를 담는 구조체 : mm_struct • File 정보 • task는 실행되면서 file들을 다룰 수 있음. • open한 file들을 관리하기 위한 구조체 변수, directory 접근 구조체 변수가 존재. • Context Switch(문맥 교환) 정보 • context(문맥)은 task가 생성될 때 kernel이 task 정보를 관리하기 위해 할당하는 많은 자료구조를 지칭. 즉, kernel이 관리하는 task의 자원과 수행 환경들의 집합. • thread_struct를 사용.(include/asm_i386/processor.h) • 자원 정보 • kernel은 task가 사용할 수 있는 자원의 양을 제한하여 과도한 자원 사용을 막는다. • include/linux/resource.h에서 자원 한계를 설정할 수 있음.

  9. 2. Process – Process 생성과 소멸 • Process 생성 • fork() 사용 • fork() -> sys_fork() -> do_fork() • do_fork() • task_struct생성 • PID 할당 • task_struct의 각 멤버 변수들을 초기화 • 새로운 자료구조를 생성 • 부모 process의 자료구조에서 값을 복사한 후 큐에 삽입

  10. 2. Process – Process 생성과 소멸 • task_struct구조체 확보 및 공간 할당 • alloc_task_struct() 함수를 호출 • task_struct와 kernel스택을 저장할 8KB 크기의 메모리 영역을 할당 • 부모 process디스크립터를 자식 process디스크립터에 복사 • 새로운 Tesk생성을 위한 자원 검사 • 일반 사용자가 너무 많은 process를 생성하는 것을 제한 • 실행 도메인 검사 및 kernel 모듈 참조 검사 • get_exec_domain() 함수를 통해 생성될 Test의 실행 도메인을 검사 • kernel 모듈을 참조하는 Test의 개수를 관리 • PID 할당

  11. 2. Process – Process 생성과 소멸 • Processdescriptor 갱신 • 부모 process로부터 상속해서 사용할 수 없는 process디스크립터의 필드를 갱신 • 부모 process가 실행 대기 중인 시그널 해제 • 타이머 초기화 • 부모 process의 자료 복사 • copy_files() : 파일 디스크립터 관련 정보 복사 • copy_fs() : 파일시스템관련 정보 복사 • copy_sighand() : 시그널 핸들러 복사 • copy_mm() : 메모리 관련 정보 내용 복사 • copy_namespac() : 네임 스페이스 정보 복사 • copy_thread() : kernel스택 및 레지스터 종보 초기화

  12. 2. Process – Process 생성과 소멸 • Tesk리스트에 추가 • 해시 테이블에 추가 • Tesk의 상태 변경 • TASK_RUNNING 상태로 설정하고 실행 큐에 삽입

  13. 2. Process – Process 생성과 소멸 • Process 소멸 • do_exit() 함수가 수행 • process에게 할당된 각종 자료구조들을 해제 • process를 좀비 상태로 변경하고, 스케줄러를 호출 • do_exit() • 현재 Tesk를 tsk변수에 저장 • 현재 Tesk의 타이머를 중지 • Tesk가 사용하던 가상 메모리 해제 • 세마포어 큐에서 제거 • Tesk가 열었던 파일 디스크립터 제거 • 파일시스템 정보 제거 • 네임 스페이스 정보 제거 • 시그널의 핸들러 제거 • Tesk가 사용하던 모듈이 있으면 참조 횟수를 감소 • process 종료 통보(시그널) • 스케쥴러 호출

  14. 2. Process – Process 상태와 전이 running • Process 상태와 전이 exit dispatch ready timeout zombie wait fork Sleep, lock Wakeup, unlock wait

  15. 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를 번갈아가며 선택하는 방법

  16. 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

  17. 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씩 증가

  18. 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 전송 시 함수 호출 흐름

  19. 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가어떻게 연결되는지를 보여준다.

  20. 2. Process - Signal • Signal 처리 • 사용자 모드로 복귀하기 전에 시그널이 있는지 검사하고, 존재한다면 시그널을 처리.

More Related