예외(Exception)과 오류(Error)의 개념


예외(Exception)

프로그래밍에서 마이크로프로세서가 수행 중에 있는 작업이 중단된 상태며, 그 상황을 별도의 루틴을 사용해서 처리하는 방식

별도의 처리 루틴이 있다는 측면만을 제외하면 예외는 인터럽트(interrupt)의 개념과 비슷함.


오류(Error)

미리 기대한 값을 얻을 수 없거나 혹은 어떤 상태가 일관적이지 못한 상황


예외(Exception)과 오류(Error)의 차이점

어떤 값이나 상태를 미리 파악할수 있는가는 점이다.

어떤 값을 얻을 수 있거나 어떤 문제가 발새알 상황을 미리 예상해서 별도의 루틴으로 처리하면 예외(Exception), 예상한 어떤 값을 얻을 수 없거나 어떤 상황이 일관적이지 않다면 오류(Error).


영어 표현에서 예외란 용어를 쓸 때 "throw/catch"란 동사를 사용함

오류는 사전에 알지 못한 일이 갑자기 일어난 것을 말해주는 "occure"란 동사를 쓴다.


출처: 닷넷 웹서비스 원리와 구현, 번역판 p.72



닷넷 웹 서비스 (원리와 구현)

저자
키스 밸린저 지음
출판사
피어슨에듀케이션코리아 | 2004-12-29 출간
카테고리
컴퓨터/IT
책소개
마이크로소프트의 프로그램 매니저인 키스 밸린저가 집필한 닷넷에서...
가격비교


Buy me a coffeeBuy me a coffee


도전임베디드OS만들기코딩하며배우는운영체제원리
카테고리 컴퓨터/IT > OS > 임베디드시스템
지은이 이만우 (인사이트, 2009년)
상세보기


요즘, 도전 임베디드 OS만들기란 책을 요즘 보고 있습니다.

이지보드가 없는 터라 책에 있는 예제를 보고 따라하려니 qemu 에뮬레이터를 돌려야 하더군요.

맥에서 qemu emulator를 brew로 설치(brew install qemu)하였습니다.

이후 책의 예제를 컴파일 한 후에 qemu를 실행하려니 아래와 같은 에러가 계속 뜨는겁니다 -ㅁ-

$ qemu-system-arm -M connex -pflash u-boot.bin -nographic

qemu: Error registering flash memory. 


이런 낭패가... 구글링한결과 아래와 같이 실행하면 된다는군요 -_-;; (책의 내용이 약간 예전 내용이라서 현재 버전과 안맞는 경우가 약간은 있더군요 ㅠㅠ)

dd of=flash bs=1k count=16k if=/dev/zero
dd of=flash bs=1k conv=notrunc if=u-boot.bin 

qemu-system-arm -M connex -pflash flash -monitor null -nographic

아래는 맥에서 테스트했을때 화면입니다.


'컴퓨터 > Embedded' 카테고리의 다른 글

AVR 책을 삼  (6) 2006.12.27
부품이 왜이리 비싸?  (5) 2006.12.22
윤교수의 마이크로프로세서 월드  (0) 2006.09.18
CISC와 RISC의 차이점?  (2) 2006.09.18
Buy me a coffeeBuy me a coffee


Mac에서 Homebrew로 패키지를 관리하다 업데이트를 하니 아래와 같은 에러가 났습니다. -_-;;


$ brew update

From http://github.com/mxcl/homebrew

 * branch            master     -> FETCH_HEAD

error: Your local changes to the following files would be overwritten by merge:

Library/Formula/argp-standalone.rb

Library/Formula/aria2.rb

Library/Formula/aspell.rb

Library/Formula/audiofile.rb

Library/Formula/bdw-gc.rb

Library/Formula/boost.rb

Library/Formula/cdargs.rb

Library/Formula/cdparanoia.rb

Library/Formula/cdrdao.rb

Library/Formula/celt.rb

Library/Formula/clisp.rb

Library/Formula/ctags.rb

Library/Formula/d-bus.rb

Library/Formula/dbus-glib.rb

Library/Formula/dialog.rb

Library/Formula/dirac.rb

Library/Formula/dotless.rb

Library/Formula/elinks.rb

Library/Formula/emacs.rb

Library/Formula/erlang.rb

Library/Formula/flac.rb

Library/Formula/flusspferd.rb

Library/Formula/fontforge.rb

Library/Formula/frink.rb

Library/Formula/gambit-scheme.rb

Library/Formula/gawk.rb

Library/Formula/gd.rb

Library/Formula/glib.rb

Library/Formula/gmp.rb

Library/Formula/gnutls.rb

Library/Formula/google-app-engine.rb

Library/Formula/google-perftools.rb

Library/Formula/gpgme.rb

Library/Formula/graphicsmagick.rb

Library/Formula/gtk+.rb

Library/Formula/guile.rb

Library/Formula/hydra.rb

Library/Formula/id3lib.rb

Library/Formula/igraph.rb

Library/Formula/intltool.rb

Library/Formula/jasper.rb

Library/Formula/jnethack.rb

Library/Formula/john.rb

Library/Formula/libao.rb

Library/Formula/libevent.rb

Library/Formula/libexif.rb

Library/Formula/libsigsegv.rb

Library/Formula/libspatialite.rb

Library/Formula/libvirt.rb

Library/Formula/libvpx.rb

Library/Formula/libxml2.rb

Library/Formula/log4cxx.rb

Library/Formula/lua.rb

Library/Formula/monotone.rb

Library/Formula/mosh.rb

Library/Formula/mpd.rb

Library/Formula/mplayer.rb

Library/Formula/mysql-connector-c.rb

Library/Formula/mysql.rb

Library/Formula/nethack.rb

Library/Formula/nmap.rb

Library/Formula/node.rb

Library/Formula/octave.rb

Library/Formula/pango.rb

Library/Formula/parsley.rb

Library/Formula/pbzip2.rb

Library/Formula/pcre.rb

Library/Formula/pdflib-lite.rb

Library/Formula/phpsh.rb

Library/Formula/portaudio.rb

Library/Formula/povray.rb

Library/Formula/proj.rb

Library/Formula/protobuf.rb

Library/Formula/psgrep.rb

Library/Formula/pv.rb

Library/Formula/rabbitmq.rb

Library/Formula/ranger.rb

Library/Formula/rebar.rb

Library/Formula/redis.rb

Library/Formula/redland.rb

Library/Formula/ruby-enterprise-edition.rb

Library/Formula/ruby.rb

Library/Formula/sbcl.rb

Library/Formula/silk.rb

Library/Formula/spatialite-tools.rb

Library/Formula/sphinx.rb

Library/Formula/spin.rb

Library/Formula/streamripper.rb

Library/Formula/swi-prolog.rb

Library/Formula/syck.rb

Library/Formula/tesseract.rb

Library/Formula/ufraw.rb

Library/Formula/unittest.rb

Library/Formula/valgrind.rb

Library/Formula/visualboyadvance.rb

Library/Formula/vpnc.rb

Library/Formula/w3m.rb

Library/Formula/wine.rb

Library/Formula/x264.rb

Library/Formula/xchat.rb

Library/Formula/yaf.rb

Library/Formula/zeromq.rb

Library/Homebrew/compatibility.rb

Library/Homebrew/exceptions.rb

Library/Homebrew/extend/pathname.rb

Library/Homebrew/formula.rb

Library/Homebrew/test/test_versions.rb

Please, commit your changes or stash them before you can merge.

Updating cb377cb..4eb8e9b

Aborting

Error: Failed while executing git pull http://github.com/mxcl/homebrew.git master

$


해결방법은 아래와 같이 하면 됩니다.

sudo chown -R `whoami` /usr/local
cd /usr/local
git reset --hard master


아래는 문제 해결후 메시지입니다. Homebrew가 업데이트 안되어서 식겁했습니다 ㅠㅠ 



$ git reset --hard  master

HEAD is now at cb377cb Update polipo to 1.0.4.1.

Dae-Hyun-Sung-ui-MacBook-Pro:local studioego$ brew update

From http://github.com/mxcl/homebrew

 * branch            master     -> FETCH_HEAD

Updated Homebrew from cb377cbb to 4eb8e9b4.

==> The following formulae are new:

gdk-pixbuf  tcpstat

==> The following formulae were updated:

argp-standalone   gd*      lua* redis

aria2   glib*      monotone redland

aspell*   gmp*      mosh ruby*

audiofile   gnutls*      mpd ruby-enterprise-edition

bdw-gc   google-app-engine      mplayer* sbcl

boost   google-perftools      mysql silk

cdargs   gpgme      mysql-connector-c* spatialite-tools

cdparanoia*   graphicsmagick*      nethack sphinx

cdrdao   gtk+*      nmap spin

celt   guile      node streamripper

clisp   hydra      octave swi-prolog*

ctags*   id3lib      pango* syck

d-bus*   igraph      parsley tesseract

dbus-glib   intltool*      pbzip2 ufraw

dialog   jasper*      pcre* unittest

dirac*   jnethack      pdflib-lite valgrind*

dotless   john      phpsh visualboyadvance

elinks   libao      portaudio vpnc

emacs   libevent*      povray w3m

erlang   libexif*      proj* wine

flac*   libsigsegv      protobuf x264*

flusspferd   libspatialite      psgrep xchat

fontforge   libvirt      pv yaf

frink   libvpx*      rabbitmq zeromq

gambit-scheme   libxml2*      ranger

gawk*   log4cxx      rebar

No external commands were updated.



Buy me a coffeeBuy me a coffee



설치오류

Unknown reason - 18

위의 같이 앱이 설치 안되는 문제는 어플을 내부에서 설치하지 않고 App2sd로 외부 메모리로 설치할때 가끔 발생된다고 합니다.

해결방법은 su 로 root권한을 얻은 후 아래와 같이 파일을 삭제하면 된다.


rm /mnt/secure/asec/smdl2tmp1.asec


위의 파일을 삭제하니 다시 정상적으로 앱이 설치 되더군요. 커스텀롬에 App2sd를 넣은 거라 가끔식 앱 설치가 안될수도 있군요.

저는 Busybox를 설치하였기 때문에 남들과 다르게 보일겁니다.

sh-3.2# rm /mnt/secure/asec/smdl2tmp1.asec

rm /mnt/secure/asec/smdl2tmp1.asec

sh-3.2#


Buy me a coffeeBuy me a coffee
예전, 2006년 5월경. 2006년 1월초부터 모 조직의 Linux서버를 갑자기 맡고나서 안정적으로 운영을 한답시고 공부를 하다가, 갑자기 서버에 이상이 생길듯한 징후들이 보였습니다.

어떤 징후였나면파일이 갑작스럽게 접근이 안되는 것도 있었고, 시스템이 갑자기 느려지고 등의 문제가 있었습니다.
그 당시에는 혼자만 쓰던 Linux가 아니라 여러 사람들이 쓰는 Linux서버를 처음 맡게 되어서 어떻게 해결할지도 걱정되었지요. 그때에 하드디스크 부족해서 N모사 다니시는 90학번 선배님이신 클랴님 친구분께 하드디스크를 얻어서 공간 확보하느라 정신 없을 시기였습니다.

그러다 2006년 8월달. 모 조직의 Linux서버가 있는 학교 컴퓨터실에 공사를 한다고 정전이 되어버렸습니다.

정전이 난 후에 다시 컴퓨터를 켜보니 뭥미? 컴퓨터 부팅이 안되는 것이였습니다. 
아래와 같은 메시지가 뜨고나서 좌절을 했지요.

*** An error occurred during the file system check.
*** Dropping your to a shell : the system whill reboot
*** when you leave the shell.
Give root passwd for maintenance
(or type Control-D for normal startup) :
이걸 알아보니, 갑작스런 정전 또는 비정상적인 시스템 종료등으로 인해 마운트되어 있던 파일 시스템이 정상적으로 언마운트 되지 않아 파일 시스템에 이상이 생기게 되면 부팅시 자동으로 파일 시스템을 복구하는 유틸리티에 의해서 복구가 되는데 파일시스템 손상정도가 심해서 자동으로 복구가 되지 않아서 이런 메시지가 나오는 것임.
파일 접근이 안되고, 파일이 안읽혀지는 등의 문제였죠.

그래서 부랴부랴 하드디스크 복구 시도를 했다만...
exec of init(/sbin/init) failed!!! : No such file or directory
Kernel panic - not syncing : Attemped to kill init!
이것때문에 하드디스크 새로 구해서 다시 설치하는 삽질을 했습니다.

이후로도 하드디스크문제때문에 2006년 내내 골치를 썩혔죠.
모 조직 Linux서버의 문제점은 하드디스크의 내구연한을 충분히 넘겼는데도 그대로 사용하여, 후임인 저에게 골탕먹이는 짓을 했다죠. 하드디스크가 3개 있었는데 다들 4년을 넘게 쓰던 것이라서 자료의 안전성이 걱정이 되었죠.

2007년도에 제 돈 쓰고 자료들을 옮겨서 자료 손실은 없는 것이 다행.

2006~2007년도에 Linux에서 하드디스크 문제로 나오는 Error들을 너무나 많이 보아서 눈 감고도 문제를 풀 정도가 되었습니다.

2007년 10월달이였나? 이때에는 Linux서버가 해킹되는 문제가 생겼습니다.
KT에서 전화가 와서 
그래서 여기서는 문제를 발견 못했다 irc데몬이 돌아간다는 것에 경악하여 서버 다시 설치 -_-;; 여기서는 서버 에러를 못알아먹을 수 있구나와 해킹이 쉽게 되는 것을 알게 되었죠.

2008년 7월 방학때.
연구실에 들어가서 2008년 2월부터 Linux서버 두대를 운영하게 되었습니다. 하나는 연구실 연구용 서버, 또 다른 하나는 교수님이 연구및강의용으로 사용하는 서버였죠. 둘다 Fedora Core 7 (x86_64)를 쓰게 되었습니다.
어느날 Linux(Fedora Core 8 x86_64)에 Sakai Project를 돌리면서 yum으로 update를 하였습니다. 
(※ 참고로 Fedora Core 7에서 8로는 5월달에 업그레이드 하였습니다.

제가 쓰고 있는 연구용 컴퓨터의 램이 1Gb라서  Sakai Project와 동시에 yum으로 update를 하다가 메모리를 다 쓰고 스왑까지 다써서 접속 자체도 안되고등의 메모리 부족 에러가 생겼다.
Sakai Project는 메인 메모리를 1G가까이 사용되는 대규모 Project이라서 tomcat를 쓰는데에 메모리 할당을 엄청 많이 해버렸지.
yum으로 업그레이드 하는데에도 실행을 해야하니 메모리를 많이 사용해야하니 컴퓨터에 메모리 부족에러 뜨면서 제대로 작동이 되지 않는 문제가 생겼 ㅠㅠ
Cannot allocate memory
Out of Memory: Kill process 
위 문제때문에 Fedora Core를 버리고 CentOS로 전향하게 되었고, 교수님과 쇼부를 쳐서 램 1G더 마련해서 위의 문제가 없게 만들었습니다.

그리고 그래픽카드 문제도 생겨서 용산서 수리까지 하였음. -_-;; 그래픽 카드는 Kernel Error는 안나왔지만 모니터 출력이 안되어서 -_-;;

(위의 문제때문에 한달내내 연구를 진행하지 못하고 서버문제만 매달리다 짤릴듯 하였다 ㄷㄷㄷ)

Linux에서 하드디스크 에러만 줄창 보다 프로세스 너무 많이 굴리면 메모리 부족하여 실행못하는 에러까지 다 봤으니 서버를 빡세게 굴리는 것은 확실한 것이다 ㅎㅎ

그리고 2008년 10월 10일
지도교수님 서버에 접속이 갑자기 안되자, 뭔가 원인이 뭔지 모르다가 아래의 메시지가 나와 당황 ;ㅁ;
Give root passwd for maintenance
(or type Control-D for normal startup) :
다른 문제는 없었고 갑자기 잘 돌아가다 멈춰버리는 것이였다.

하드디스크쪽에는 전혀 문제가 없었고(산지 얼마되지 않는 컴퓨터에 fsck로 검사해보아도 아무런 문제 없었음) 잘 돌아가다 갑자기 멈추는 에러가 생겨서 재부팅을 시도를 해보았더니......
계속 이런 메시지가 뜬다.
Kernel panic not syncing: Aiee, killing interrupt handler!
아님
RIP blah~ blah~
REP blah~ blah~
Kernel panic - not syncing: Attempted to kill init!
그러다 갑자기 부팅이 안된다. 부팅이 안되고 삐익 소리만 계속 난다. 이건 메인보드쪽 문제임을 알게 되었음.
부팅이 되었다 그러나 아래의 메세지가 나온다. ㅠㅠ
Call Trace
_atomic_dec_and_lock+0x39/0x58
dput +0x37/0xfb
path_release+0xc/0x27
vfs_stat_fd+0x3c/0x4a
autoremove_wafe_function+0x0/0x2e
kmsg_read+0x3a/0x44
sys_newstat+0x19/0x31
tracesys+0xd5/0xda
메인보드같은 하드웨어쪽의 문제를 알고 나서 용산가야겠다는 생각이 들면서..... 이건 내 책임이 아니라 컴퓨터가 부끄럼을 타서를 주장해야겠다.
(메인보드같은 하드웨어 문제이니 만큼 수리비는 교수님이 주시겠지?)

2006년도부터 조직 서버를 관리 했었고 2008년도에 연구실에 들어가면서 Linux서버에서 나오는 에러는 다 보는 것 같은 생각을 해보았다.
(위의 내용 말고도 더 많은 에러 메세지를 보았지요. 그러나 Kernel에서 에러나는 것은 아니니 기록은 제외)

ps. 이 글은 지도교수님 서버가 메인보드 에러가 나와 부팅 안되는 것을 한탄을 하며 쓴 글입니다.
Buy me a coffeeBuy me a coffee

+ Recent posts