System Call Linux Kernel 수업 3번째.

Slides:



Advertisements
Similar presentations
Lee Hoon Copyright(c) 2008 LeeHoon All rights reserved. 제7강제7강.
Advertisements

YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
Page 1 Android Programming November 04 / 2009 S/W Junhyuk Jang.
2013학년도 3-1 정보컴퓨터공학부 컴퓨터 소프트웨어 설계 및 실험
CDMA SW 구조 AIITQC 서울본원교육장 양 종 윤.
Vision System Lab, Sang-Hun Han
Basic of Buffer Over Flow
Project #2-2. Pintos User Program
SYSTEM CALL (Syscall) CSLAB SEWON PARK.
Linux/UNIX Programming APUE (The Environment of a UNIX Process)
Shellcode 작성 김영성.
임베디드 SW 시스템 소개 - 임베디드 운영체제 - 임베디드 리눅스 - 임베디드 인터넷
제 2장 컴퓨터 구조.
리눅스 커널의 이해 중에서 4장. 인터럽트와 예외 이성현 네트워크 실험실.
9장 가로채기(Interrupt) Slide 1 (of 15).
Understanding of Socket and File I/O
정보통신실습 및 특강(5)
1장 유닉스 소개.
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
A n d r o i d Android 2010 년 5월 19일 작성자 : 백 선 재.
C 프로그래밍 소개 숙명여대 창병모 2011 가을.
제6장 FUSING.
FUSING.
디바이스 드라이버.
14. 입출력 다중화 김진홍
Department of Computer Engineering
Linux를 이용한 Embedded 장비 개발
리눅스 커널의 이해 중에서 1장. 소개 이원구 네트워크 실험실.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 14. 포인터와 함수에 대한 이해.
Linux System Programming
S3c6410을 이용한 리눅스 비디오 드라이버 포팅 가이드 – - Linux Video Driver Porting Guide Using s3c6410 – 박영만
운영체제와 Windows XP 초등 ICT 교육 방법론 2013년 1학기.
컴퓨터 구조.
System Call 구현 기초 (since 2004) (교재에는 7th 2006에 포함)
4장. 컴퓨터 시스템의 구성과 기능 다루는 내용 컴퓨터 분해를 통한 본체 살펴보기 컴퓨터 구성요소 컴퓨터의 기능
Department of Computer Engineering
2장 운영 체제의 개요 운영체제의 개념 운영체제의 유형 운영체제의 발전 과정 운영체제의 구성 운영체제 서비스 시스템 구조
Linux Kernel Programming newsyscall (since 2004~ textbook 7th 2006~)
Term Project Team Member
Operating System 5주차 - System Call Analysis -
운영체제 (Operating Systems) (Multi-Thread Programming)
Geek-OS Project 정영진
Xen and the Art of Virtualization
제3,4,5장 프로세스, 스레드 관리 CPU 스케줄링.
System Call 구현 기초 Linux 커널의 새로운 시스템 호출 구현은 아래 두 가지 작업으로 구성 커널 수정
실시간 자원 량 정보 제공을 결합한 Heartbeat
제2장 프로세스 이나현.
문자 디바이스 드라이버 임베디드 시스템.
Linux Kernel Programming newsyscall (since 2004~ textbook 7th 2006~)
Memory & Data Management.
2018 봄학기 Pusan National University School of CSE
Linux/UNIX Programming
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
망고100 보드로 놀아보자 -12 커널 디렉토리 설명
운영체제 (Operating Systems) (Memory Management Strategies)
네트워크 프로그래밍의 이해 School of Electronics and Information.
리눅스 디바이스 드라이버 (Linux Device Driver)
Linux/UNIX Programming APUE (Thread Programming)
Music Robot #Define A+(12-15조) 팀원: 05학번 양현철 , 김 청 07학번 예강훈 , 김한수
23. Unix 시스템 커널. 개요 커널의 기본 서비스 커널의 특징 참고서적 프로세스 관리 장치 관리 파일 관리 가상 메모리
Department of Computer Engineering
8. 리눅스의 내부 군자삼락 [君子三樂] 청출어람이청어람 [ 靑出於藍而靑於藍 ] Why Linux ?
안드로이드 앱 분석 팀 기반의 설계 프로젝트 박민재
화 일 구 조 Chapter 3 화일의 입출력 제어.
운영체제보안 3번 과제 설명 팀 기반의 설계 프로젝트 박민재
C.
Virtual Machine Management
Eclipse를 이용한 Embedded Linux 응용 프로그램 개발
가상 기억장치 (Virtual Memory)
이성준 Library 만들기 이성준
Presentation transcript:

System Call Linux Kernel 수업 3번째

목 차 System call 처리 과정 System call 추가 실습 파라미터를 이용한 시스템 콜 실습 구조체를 이용한 시스템 콜 실습 OS2 강의교재

System call OS2 강의교재 System Call Interface (X86 Interface 0x80) Libraries (ex: C Runtime Library) User Program & Application User Level Kernel Level System Call Interface (X86 Interface 0x80) Memory Management Virtual File System (VFS) Process Management Buffer Char Block Device Driver Kernel Level Hardware Control H/W Level Hardware Control OS2 강의교재

System call 처리과정 시스템 콜 흐름의 예 1. 사용자 프로세스에서 시스템 콜 사용 2. Libc.a  Argument stack에 넣음  시스템 콜 번호 저장 트랩발생 3. system_call()  IDT 에 의해 트랩 시작  sys_call_table 사용  핸들러 실행 4. 시스템 콜 핸들러 함수  시스템 콜 핸들러 함수는 256개 까지 가능(커널 2.4.20) OS2 강의교재

System call 처리과정 fork system call의 흐름 user task IDT 0x00 0x80 libc.c ENTRY(system_call) /* arch/i386/kernel/entry.S */ SAVE_ALL … Call *SYMBOL_NAME(sys_call_table) (, %eax, 4) …ret_from_sys_call(schedule, signal, bh_active, nested interrupt handling) user task 0x00 0x80 IDT devide_error(); Debug(); Nmi(); ... System_call(); main() { ..// fork(); ... } libc.c ... fork() { movl 2, %eax int $0x80 …} sys_call_table sys_exit(); sys_fork(); sys_read(); sys_write(); ... 1 2 3 4 .. sys_fork(); /* kernel/fork.c */ OS2 강의교재

IDT(interrupt Descriptor Table) I386에서는 IDT를 통해 모든 인터럽트가 관리 시스템 콜은 0x80번의 인터럽트를 사용 OS2 강의교재

파일 구성 모든 시스템 콜 번호는 /include/asm/unistd.h 에 정의 시스템 콜 테이블은 /arch/i386/entry.S에 정의 #define __NR_exit 1 #define __NR_fork 2 #define __NR_read 3 ... #define __NR_sched_getaffinity 242 .long SYMBOL_NAME(sys_ni_syscall) .long SYMBOL_NAME(sys_exit) .long SYMBOL_NAME(sys_fork) .long SYMBOL_NAME(sys_read) ... .long SYMBOL_NAME(sys_getaffinity) OS2 강의교재

실 습 시스템 콜 추가 새로 추가한 system call을 사용해 applicatioin 작성 syscall_number할당 linux/include/asm/unistd.h 에 정의 맵핑 테이블 등록(sys_call_table) arch/i386/entry.S에 시스템 콜 테이블 등록 new system call 함수를 커널에 작성 /kernel 디렉토리에 newcall.c 를 작성 커널 재 컴파일 새로 추가한 system call을 사용해 applicatioin 작성 시스템 콜이 추가된 커널로 부팅하여 응용 프로그램을 작성 OS2 강의교재

실 습 시스템 콜 추가 linux/include/asm/unistd.h 을 편집 ‘#define __NR_newcall 253’ 을 추가 OS2 강의교재

실 습 arch/i386/kernel/entry.S 을 편집해서 시스템콜 테이블 등록 .long SYMBOL_NAME(sys_newcall) 을 추가 OS2 강의교재

실 습 /kernel 디렉토리에 newcall.c 를 작성 OS2 강의교재

실 습 /kernel 디렉터리에 /kernel/Makefile 을 편집 newcall.o 를 추가 커널 컴파일 시에 자동으로 목적 파일을 생성함 OS2 강의교재

실 습 커널 재컴파일 앞장 참조 새로 컴파일한 커널을 부트로더에 등록 리부팅 후 새로 컴파일한 커널로 부팅 OS2 강의교재

실 습 새로운 시스템 콜(253번)을 사용할 프로그램 test.c 파일 작성 시스템 콜의 사용을 위한 stub 작성이 필요함 _syscall0(type,name)은 인자가 없음을 의미 ( type:함수리턴형 , name:함수이름 ) _syscall1(type,name,type1,type_name)형식 지정한 type1 변수는 ebx cpu범용레지스터에 들어감 인자가 2개면 _syscall2,.. unistd.h에는 인자 6까지 변환하는 매크로 존재. OS2 강의교재

실 습 파일 작성후 컴파일시 에러 개발 커널에서의 unistd.h 불일치 수정 OS2 강의교재

실 습 Application 실행 dmesg 명령어를 사용하면 Hello Kernel 메세지를 볼 수 있음 OS2 강의교재

파라미터를 전달하는 시스템 콜 커널 영역과 유저 영역 사이에 값을 교환하는 Kernel API put_user(x, ptr) 유저영역으로 값 하나를 복사함 get_user(x, ptr) 유저영역에서 값 하나를 받아옴 copy_to_user(void __user * to, const void * from, unsigned long n) 유저영역으로 블록데이터를 복사 copy_from_user(void * to, const void __user * from, unsigned long n) 유저영역에서 블록데이터를 받아옴 OS2 강의교재

실 습 kernel/newcall.c 를 편집 OS2 강의교재

실 습 파라메터가 3개이므로 _syscall3을 이용 내부 선언되는 개수는 8개가 됨. 커널 컴파일 후 응용 프로그램 수정 OS2 강의교재

구조체를 사용한 시스템 콜 newcall.c 편집 OS2 강의교재

실 습 커널 컴파일 후, 응용 프로그램 수정 OS2 강의교재