오퍼레이팅시스템 프로젝트 - 리눅스 커널과 시스템 콜
본 자료는 4페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
해당 자료는 4페이지 까지만 미리보기를 제공합니다.
4페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

오퍼레이팅시스템 프로젝트 - 리눅스 커널과 시스템 콜에 대한 보고서 자료입니다.

목차

1. 목적
2. 과정
3. 문제 해결
4. 분석 & 토의

본문내용

get install libncurses5-dev
2. 4. 그 다음 구성을 시작한다.
~# cd /usr/src/linux
/usr/src/linux# make menuconfig
그냥 Exit로 나가면 된다.
2. 5. 저녁 식사를 할 시간이 되면 압축된 커널 이미지를 맹근다.
/usr/src/linux# make
다 하는데 100분 정도가 소요되므로 이래 놓고 저녁을 먹고 온다.
2. 6. 커널 모듈을 컴파일한다.
/usr/src/linux# make modules
2. 7. 커널 모듈을 설치한다.
/usr/src/linux# make modules_install
2. 8. 이제 커널 자체를 설치한다.
/usr/src/linux# make install
2. 9. 다음 명령어를 실행한다.
/usr/src/linux# cd /boot
/boot# mkinitramfs o initrd.img-2.6.28.10-2007142105 2.6.28.10-2007142105
나중에 사용할 OS의 나머지 부분을 로드하는 데 필요한 장치 드라이버가 'initrd'라는 이미지에 포함되어 있다.
2. 10. /boot/grub/menu.lst라는 파일을 업데이트한다.
/boot# update-grub
그리고 직접 열어서 'initrd'라는 게 있는지 확인한다.
2. 11. 시스템을 재부팅한다. 이제 리눅스 커널 설치는 끈났다.
3. 시스템 콜 구현
3. 1. /usr/include/asm/unistd_32.h에다 다음 줄을 추가한다.
3. 2. /usr/src/linux/arch/x86/kernel/syscall_table_32.S에는 다음 줄을 추가한다. YOU JUST REGISTERED A USER SYSTEM CALL. 그리고 이 시스템 콜은 333번째라는 것을 알아두길 바란다.
3. 3. /usr/include 폴더 안에 welcome_os.c 파일을 맹글고 다음처럼 써 놓는다.
3. 4. /usr/src/linux/kernel/sched.c에는 OS를 반기는 메시지를 입력한다.
3. 5. 과정 2. 5 ~ 2. 11를 다시 해서 커널을 컴파일한다. 이미 한 번 컴파일을 했기 때문에 이번에는 카드놀이를 하면서 시간을 때울 수도 있다. 그리고 끝난 후에 스냅샷을 만들어 두는 게 좋다. 그런 다음 재부팅한다.
3. 6. 터미널로 와서 다음 명령어를 실행한다.
~# cd /usr/include
/usr/include# gcc welcome_os.c o welcome_os
/usr/include# ./welcome_os
/usr/include# dmesg
3. 7. 다음처럼 ptrace.exe를 실행한다. 시스템 콜 번호는 333이었다. 참고로 ptrace.exe는 /usr/src/linux 폴더에 넣어두었다.
/usr/src/linux# ./ptrace.exe /usr/include/welcome_os
3. 문제 해결
1) 터미널에서 뭐만 하려고 하면 Permission denied라는 오류가 발생한다.
- 관리자 등급이 아니기 때문이다. 다음을 실행하여 관리자로 렙업한 후 다시 시도한다.
~$ sudo -s
물론 암호가 필요하다.
2) 커널을 컴파일한 후 시스템을 재부팅하면 Kernel Panic이 발생하여 부팅되지 않는다.
- 스냅샷이 있어야 한다. 먼저 스냅샷을 사용하여 재부팅하기 전으로 되돌린다. 스냅샷이 없으면 리눅스를 아예 다시 설치해야 한다. 시스템을 복구했으면 재부팅을 하기 직전의 상황으로 만든다. menu.lst를 업데이트했을 때 직접 열어 봐서 적절한 커널 버전에 'initrd' 항목이 있는지 확인한다. 없으면 과정 2. 9를 제대로 거치지 않은 것이다. 이 과정을 다시 하면 된다.
시스템 콜 구현 후에 커널을 컴파일 하는 과정이었다면, /boot/grub/menu.lst 파일에서 다음 블록이 있는지 확인한다. 있다면 삭제한다. 이 블록은 예전 버전의 정보인데다 'initrd' 항목도 없다.
3) 공유 폴더를 설정하는데 이런 오류가 발생한다.
~# mkdir /mnt/share
~# cd /mnt/
/mnt# mount t vboxsf share /mnt/share
/sbin/mount.vboxsf: mounting failed with the error: No such device.
- VBoxLinuxAddition-x86.run을 다시 실행한다. 다음 명령어로 실행한 후 다시 시도한다.
~# cd /media/cdrom
/media/cdrom# ./VBoxLinuxAdditions-x86.run
/media/cdrom# reboot
4. 분석 & 토의
과정 3. 6과 3. 7에서 우리는 사용자 시스템 콜이 다른 것들보다 늦게 호출되는 것을 알 수 있다. 사용자 시스템 콜은 다른 시스템 콜과 연관이 없기 때문에 아마도 우선순위가 가장 낮아서 늦게 호출되는 게 아닐까 생각해 볼 수 있다. 그리고 사용자 시스템 콜보다 늦게 호출되는 시스템 콜은 번호가 252인데, 이름이 "sys_exit_group"이다. 이 시스템 콜은 어디에서 호출되는지는 확인할 수 없었지만, 시스템 콜을 종료시키는 기능을 하고 있어서 맨 마지막에 호출되었다고 추측했다.
리눅스를 처음으로 사용했을 때 상당히 많이 애먹었다. 학교에서 요구하는 리눅스 커널 버전이 좀 별나서 요즘 버전과는 컴파일 방법이 거의 달랐다. 간신히 적절한 방법을 찾아내서 해결할 수 있었다. 이쯤에서 나는 경쟁자들을 상당수 앞지를 것 같다는 기대감이 들었다.
시스템 콜을 추가하는 작업은 장난이 아니었다. 역시나 적절한 커널 버전에 대한 방법은 찾을 수가 없었다. 어쩔 수 없이 다른 버전의 방법을 볼 수밖에 없었다. 당근 많은 부분이 달랐기 때문에 제대로 될 리가 없었다.
며칠 후, 나는 주어진 매뉴얼을 자세히 읽어봤고, 마침내 뭐를 해야 하는지 발견했다. 그리고 원하는 결과를 얻을 수 있었다. 자기가 직접 해 볼 생각을 하지 않고 인터넷만 의지하면 이렇게 된다. 다른 경쟁자들 중엔 이런 걸 잘 모르는 애들이 적지 않으니까 갸들은 꽤나 고생할 것이다.
처음엔 하기 싫었는데 해 보니 재밌었다. 나중에 또 해 보고 싶다.

키워드

  • 가격2,000
  • 페이지수12페이지
  • 등록일2010.10.07
  • 저작시기2010.9
  • 파일형식한글(hwp)
  • 자료번호#633837
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니