• 전문가 요청 쿠폰 이벤트
*지*
Bronze개인
팔로워0 팔로우
소개
등록된 소개글이 없습니다.
전문분야 등록된 전문분야가 없습니다.
판매자 정보
학교정보
입력된 정보가 없습니다.
직장정보
입력된 정보가 없습니다.
자격증
  • 입력된 정보가 없습니다.
판매지수
전체자료 2
검색어 입력폼
  • 운영체제 과제 나만의 시스템 콜 만들기 system call 평가B괜찮아요
    OS 과제1: 나만의 System call 추‘uname r’ 결과 ----------------------------------------------------- 2커널 수정 ------------------------------------------------------------ 21) System call 번호 할당 --------------------------------------------------------- 22) System call 테이블 등록 ------------------------------------------------------- 23) System call 처리 함수 구현 --------------------------------------------------- 34) Makefile 수정 ------------------------------------------------------------------ 35) 커널 컴파일 및 재부팅 -------------------------------------------------------- 33. 사용자 수준 --------------------------------------------------------- 41) 사용자 프로그램 구현 --------------------------------------------------------- 42) System call 및 사용자 프로그램 작동 ---------------------------------------- 44. 문제점 & 해결 방안 ------------------------------------------------ 5컴파일한 커널로 부팅한 뒤 ‘uname r’ 결과2. 커널 수정1) 시스템 콜 호출 번호 할당: /usr/src/linux/arch/x86/syscalls/syscall_64.tbl2) 시스템 호출 테이블 등록: /usr/src/linux/include/linux/syscalls.h3) 시스템 콜 호출 함수 구현: /usr/src/linux/kernel/ 하위에 addcall.c 작성4) Makefile 수정: /usr/src/linux/kernel/Makefile(위에서 작성한 파일명의 오브젝트 파일을 obj-y에 추가)5) 컴파일 및 재부팅: make mrproper -> make menuconfig -> make -> make modules -> make modules_install -> make install -> make bzImage -> exit -> reboot2. 사용자 수준1) 시스템 콜을 사용하는 사용자 프로그램 구현2) 구현된 시스템 콜 및 사용자 프로그램 작동3) 결과 확인3. 커널 컴파일 과정에서 발생한 문제점 & 해결방안
    공학/기술| 2017.06.06| 5페이지| 1,500원| 조회(474)
    미리보기
  • 운영체제 과제 문자 디바이스 프로그래밍
    < 운영체제 과제2 >: 문자 디바이스 프로그래밍< 목차 >서론 ---------------------------- 31) 연구 분야 ------------------------------ 32) 동기 ---------------------------------- 33) 목적 ---------------------------------- 34) 연구 방법 ------------------------------ 42. 관련 연구 ------------------------- 43. 본론 ---------------------------- 61) 모듈 프로그램 작성 --------------------- 62) 모듈 프로그램 컴파일 ------------------- 83) 모듈 설치 ----------------------------- 84) 디바이스 노드 생성 --------------------- 85) 모듈 및 디바이스 노드 확인 -------------- 86) 응용프로램에서 접근 -------------------- 97) 모듈 제거 ----------------------------- 108) 디바이스 노드 제거 --------------------- 104. 구현 --------------------------- 115. 결론 --------------------------- 17●참고 문헌 ----------------------- 171.서론1) 연구 분야리눅스는 모듈을 도입함으로써 커널의 일부를 변경할 수 있도록 한다. 모듈이란 필요에 따라 커널에 로드하거나 언로드 할 수 있는 특정한 기능을 수행하는 프로그램을 말한다.또한, 리눅스는 디바이스(키보드, 마우스, 터미널 등)를 다루기 위해 수많은 디바이스 드라이버를 제공한다. 디바이스 드라이버는 하드웨어를 제어하는 동시에, 응용프로그램에서 사용가능한 함수 목록과 같은 인터페이스를 제공한다. 디바이스 드라이버와 디바이스 파일2) 동기커널은 그 자체로 하나의 큰 프로그램이기 때문에 디바이스 드라이버를 하나 추가하더라도 커널 설정을 다시 하고, 다시 컴파일 해야 하는 불편이 있다. 초기 디바이스 드라이버를 커널에 포함한 후 컴파일 과정을 거친다. 이렇게 되면 커널 컴파일이라는 긴 작업시간이 필요하고 잘못된 디바이스 드라이버에 의해 부팅 도중 커널이 멈출 수 있다.디바이스 드라이버는 하드웨어를 제어하는 동시에, 응용프로그램에서 사용가능한 함수 목록과 같은 인터페이스를 제공한다. 리눅스에서는 모든 디바이스를 파일로 취급하며 VFS라 불리는 디바이스와 파일에 공통된 인터페이스를 제공한다.3) 목적리눅스는 디바이스와 파일에 공통된 인터페이스를 제공한다. 문자 디바이스 프로그래밍은 사용자 응용프로그램을 이용해 커널공간의 디바이스 드라이버에 접근과 디바이스 드라이버가 제어하는 하드웨어까지의 일련의 접근 방식을 알게 한다. 그 과정에서 모듈 프로그래밍을 이용해 커널 컴파일의 시간을 줄이고 재사용성과 효율성을 높인다.4) 연구 방법1. 모듈 프로그램 작성2. 모듈 프로그램 컴파일 (#make)3. 모듈 설치 (#insmod)4. 디바이스 노드 생성(#mknod)5. 모듈 확인 (#lsmod)6. 응용프로그램에서 접근(open(), read(), write(), etc)7. 모듈 제거 (#rmmod)8. 디바이스 노드 제거2. 관련 연구1) #define module_param(name, type, perm) module_param_named(name,name,type,perm): 이 매크로는 변수를 대신 선언해주지는 않는다. 즉 매크로를 사용하기 전에 반드시 변수를 직접 선언해야한다. 모듈이 insmod 될 때 인자 값을 전달하는 역할을 하는 함수이다. (name:변수명, type:변수타입, perm:권한)2) int __init my_init(void): ‘__init’은 해당하는 함수나 변수가 운영체제의 초기화 과정에만 사용된다는 것을 의미한다. 초기화 과정에만 사용되는 함수는 일단 초기화 과정이 끝나면 더 이상 필요가 없다. 그래서 이런 초기화에만 필요한 함수나 변수를 별도의 영역에 따로 모아두었다가, 초기화를 마친 후 이 영역의 메모리를 해제한다. 그렇게 하면 필요 없는 메모리를 제거하여 커널이 차지하는 메모리의 양을 줄일 수 있게 된다.3) void __exit my_init(void): ‘__exit’는 종료를 할 때 불리는 함수나 이와 관련된 변수들을 지정할 때 사용한다. 어떤 드라이버가 커널에 포함되어 있는 경우 시스템을 종료할 때 각각의 종료함수를 부르지 않아도 되기 때문에 이들 역시 메모리에서 제거될 수 있다. 커널은 시스템 초기화를 마친 직후 이들 버릴 수 있는 섹션에 있는 메모리들을 해제한다.4) copy_from_user(to, from, n): 사용자 메모리 블록 데이터를 커널 메모리 블록 데이터에 써넣는다.(from:커널 메모리 블록 주소, to: 사용자 메모리 블록 주소, n: 써넣을 바이트 크기)5) copy_to_user(to, from, n): 커널 메모리 블록 데이터를 사용자 메모리 블록 데이터에 써넣는다.(from:커널 메모리 블록 주소, to: 사용자 메모리 블록 주소, n: 써넣을 바이트 크기)6) struct file_operations: 파일 시스템을 통해 문자 디바이스 드라이버와 응용 프로그램을 연결시켜주는 구조체이다. (open(), read(), write(), release(), etc).7) register_chrdev(unsigned int, const char*, struct file_operations *fops): 커널 내부에 등록된 문자장치를 관리하는 chrdev[] 배열 구조체에서 하나의 배열을 할당 받고, 그 배열 안의 필드에 각각의 device_name과 file_operations를 연결하는 기능을 수행한다.8) unregister_chrdev(unsigned int, const char*): 등록된 디바이스를 제거한다.9) module_init(): 모듈 적재 함수를 위한 매크로이다.10) module_extit(): 모듈 제거 함수를 위한 매크로이다.11) MODULE_LICENSE(): MODULE_LICENSE 매크로는 커널에게 모듈이 어떤 라이센스 하에서 커널을 이용하게 되는지를 알려주는 역할을 한다. 커널 2.4 버전 이후에, GPL(General Public License) 에 영향을 받아 코드의 라이센스를 명시하는 메커니즘이 고안되었다. 사용하는 라이센스에 따라서 사용할 수 있는 심볼(함수 혹은 변수 등)에 제한이 생기게 된다. GPLv2 라이센스를 선택했다면 커널 내의 모든 심볼을 사용할 수 있다. MODULE_로 시작하는 매크로들은 모듈에 대한 정보를 제공하는 용도로 사용된다.3. 본론1) 모듈 프로그램 작성 (addmod.c)// 모듈 프로그램 작성을 위해 필요한 헤더파일을 작성한다./* insmod 시 인자 값을 전달한다.버퍼 사이즈는 1024 byte이다.insmod 시 입력받을 device_name, deice_number을 선언한다.insmod 시 device_name, device_number라는 인자와 값을 참조함을 선언한다. */// open() 호출 시 메시지를 출력한다./* write() 호출 시 메시지를 출력한다.copy_from_user() : 사용자 메모리 from을 커널 메모리 to로 n만큼 복사한다.temp 변수로 사용자 메모리가 커널 메모리에 덮어씌워짐을 방지한다. *//* read() 호출 시 메시지를 출력한다.copy_from_user() : 커널 메모리 to를 사용자 메모리 to로 n만큼 복사한다.close() 호출 시 메시지를 출력한다. */// 디바이스에서 수행되는 기능을 구현한다./* 모듈 생성 시 메시지를 출력한다.insmod 시 device_number를 입력하면 그 값을 주 번호로 할당한다.insmod 시 device_number를 입력하지 않으면 주 번호를 커널로부터 동적 할당한다.insmod 시 입력받은 디바이스 명과 주 번호를 출력한다. *//* rmmod 시 메시지를 출력한다.등록된 디바이스를 제거한다.모듈 적재 함수를 위한 매크로를 작성한다.모듈 제거 함수를 위한 매크로를 작성한다. */2) 모듈 프로그램 컴파일 (#make)// Makefile을 작성한다.3) 모듈 설치/* 모듈이 설치될 때마다 메시지를 출력한다.module_param()를 이용하여 디바이스 명과 주 번호를 할당한다. *//* device_number 입력하지 않았을 시 커널로부터 주 번호를 동적 할당한다.주 번호는 dmesg로 확인한다. */4) 디바이스 노드 생성 (#mknod)// 할당받은 디바이스의 주 번호로 /dev 디렉토리에 가상 문자 디바이스를 생성한다.5) 모듈 확인 (#lsmod)// 생성한 모듈을 확인한다.6) 응용프로그램에서 접근 (addapp.c)/* 사용자 응용프로그램 작성을 위해 필요한 헤더파일을 작성한다.버퍼 사이즈는 1024 byte이다.회 당 입력받는 문자열의 길이의 최대는 128 byte이다. *//* 파일 실행 시 디바이스 명과 전송할 횟수를 인자로 받는다.atoi()는 10진 정수 문자열을 정수로 변환한다.open()를 실행한다. *//* open() 성공 시 성공 메시지와 함께 할당된 파일 핸들 번호를 출력한다.open() 실패 시 실패 메시지 출력 후 프로그램을 종료한다. *//* 사용자가 입력한 문자열을 저장할 배열을 선언한다.전송할 횟수만큼 write()를 호출해서 문자열 입력을 반복한다.(디바이스로의 전송은 num회만큼 이루어져야한다.) *//* (디바이스로부터의 전송은 1회만 이루어져야 한다.)전송한 문자열을 디바이스로부터 모두 읽어온 뒤 화면에 출력한다.close() 호출로 파일을 닫는다. */
    공학/기술| 2017.06.06| 17페이지| 1,500원| 조회(211)
    미리보기
전체보기
받은후기 1
1개 리뷰 평점
  • A+최고예요
    0
  • A좋아요
    0
  • B괜찮아요
    1
  • C아쉬워요
    0
  • D별로예요
    0
전체보기
해캠 AI 챗봇과 대화하기
챗봇으로 간편하게 상담해보세요.
2026년 04월 17일 금요일
AI 챗봇
안녕하세요. 해피캠퍼스 AI 챗봇입니다. 무엇이 궁금하신가요?
3:07 오후
문서 초안을 생성해주는 EasyAI
안녕하세요 해피캠퍼스의 20년의 운영 노하우를 이용하여 당신만의 초안을 만들어주는 EasyAI 입니다.
저는 아래와 같이 작업을 도와드립니다.
- 주제만 입력하면 AI가 방대한 정보를 재가공하여, 최적의 목차와 내용을 자동으로 만들어 드립니다.
- 장문의 콘텐츠를 쉽고 빠르게 작성해 드립니다.
- 스토어에서 무료 이용권를 계정별로 1회 발급 받을 수 있습니다. 지금 바로 체험해 보세요!
이런 주제들을 입력해 보세요.
- 유아에게 적합한 문학작품의 기준과 특성
- 한국인의 가치관 중에서 정신적 가치관을 이루는 것들을 문화적 문법으로 정리하고, 현대한국사회에서 일어나는 사건과 사고를 비교하여 자신의 의견으로 기술하세요
- 작별인사 독후감