2008년 12월 9일 화요일

The Road(로드)


로드(THE ROAD) 상세보기


베스트셀러까지 오른 작품.
그리고 매번 영화화 하기에 좋은 작품을 만들어 주시는 "코맥 매카시" 작가님.

수많은 감상평.
'감히 성서에 비교되는...' 어쩌고 '.... 마지막의 감동' 어쩌고...

아무튼 그래서 샀다-_-);
그러나, 이 책을 다 읽은 지금 후회하고 있다.
이런 내용인 줄 알았다면 사진 않았을텐데= _ㅠ) 역시 마케팅의 힘이란 크다.
늘 낚이지 말자 다짐하건만 또 낚였다.



이 책을 반 조금 넘게 읽었을 때 쯤,
누군가 내가 물어봤다.

" 그 책 재밌어요?"

나는 대답했다.

"응."

실제로 재밌었다.
그러자 다시 물어왔다.

" 무슨 내용인데요? "

나는 대답했다.

" 아직 반밖에 안읽어서 결론은 모르겠다만, 남자 둘이서 길을 걸어가. "

" 그게 다에요? "
" 응, 그게 다야. "


읽어본 사람은 알겠지만 실제로 그게 다다.
이 소설이 재미없다거나 나쁘다는 것은 아니다.
그냥 남자 둘이 걸어가는 무미건조해보이는 스토리일지라도 이것을 재밌게, 처음부터 끝까지 읽게 한 작가의 힘이 놀랍다.
결말이 허무하고 소설의 전반적인 분위기가 내 스타일이 아니기에 사기를 후회했다는 것뿐이지, 이 책을 본 시간은 후회하지 않는다.
하지만 감상평 때문에 너무 많은 기대를 했었기에 허무함이 배가 되었고 후회도 있었을 뿐이다.
누가 나더러 책을 모르는 놈, 예술을 모르는 놈 이라고 해도 별로 할말은 없다. 난 실제로 모르니까.
난 그냥 재밌는 책을 볼 뿐이고, 살 뿐이고, 즐길 뿐이고.

조만간 영화로 개봉한다고 하니, 기대해봐야겠다.


2008년 11월 24일 월요일

시스템 콜 추가

1. system call 함수 선언

asmlinkage 반환형 sys_함수이름 ( arg1, arg2.......)
{
//To do
}


2. system call 번호 추가

include/asm/unistd.h 파일을 수정한다.
맨 아래쪽에 __NR_함수이름을 쓰고 번호를 지정해준다.


3. system call table에 추가

arch/i386/kernel/entry.S 파일을 수정한다.
ENTRY(sys_call_table) 이라고 되어있는 곳 맨 끝에 새롭게 정의한 시스템콜 함수 이름을 적는다.
.long sys_함수이름


4. 커널컴파일

$ make


2008년 10월 24일 금요일

MP3P 고르기.


난 작고 가볍고 가지고 다니기 쉬운게 좋다.
MP3P도 그렇고 디카도 그렇고.
디카도 작고 가벼운걸로 샀다. 남들 다 DSRL 살 때. 고건 내가 맨날 못갖고 다닐테니-_-;

MP3P를 골라봤다.

처음에는 셔플, MPlayer(미키마우스), S2(조약돌) 이렇게 3개를 골라봤는데, 이 녀석들의 가장 큰 단점은 액정이 없다는 것이다. 아주 가볍고 작지만-_- 액정이 없다!!
난 액정은 필요로 하지 않지만 라디오기능은 있어야 한다. 액정이 없으면 라디오 기능도 없다. 고로 이 녀석들 탈락.


물망에 오른 것은 다음과 같다.


1. 아이리버 T7

사용자 삽입 이미지

이전 사용하던 MP3P가 아이리버였는데 라디오 하나도 안나왔다. 그런고로 라디오 기능이 좀 미심쩍긴 하지만 잘나온다고 하더군.

장점!!
26.3g. 매우 가볍다.
USB 이동식 디스크 지원. 편하다.
재생시간 11시간. 오호 괜찮다.
가격은 4G가 6~7만원.

다 좋은데 단점이 있다.
음악 재생 중에는 검색기능이 안된다고.... ㄱ-); (왠지 치명적인 버그 같다.)
끝부분 디자인이 상당히 애매하다. USB나오는 곳. (한마디로 그 부분 디자인이 맘에 안든다.)



2. YEPP U3
사용자 삽입 이미지
YEPP은 일단 음질이 좋으니까 플러스 하고 들어간다.

장점!!
무게 22.8g!!!! 아주~! 가볍다.
USB 이동식 디스크 지원. 편하고.
15시간 재생. 굳굳.
가격은 2G가 5~6만원.

단점!!
열받는 터치-_-)! (주머니 속에서의 조작 불가능)
구린 LCD -_-)! (어짜피 옵션인거 컬러가 아니어서 좋지만 T7에 비하면 LCD구성이 좀...)



3. U3의 후속작 U4
사용자 삽입 이미지
일단 삼성. 음질 플러스. U3 후속이니까 더 좋아졌겠지 하는 마음이 있다.

장점!!
U3보다 훤칠한 디자인. (내가 좋아라 하는 보라색이 있다!)
16시간 재생!
27.5g의 가벼움.
USB 이동식 디스크 지원.
가격은 2G가 6~7만원.
터치 버튼 가운데 동그란 홈이 있어서 주머니 속 조작 가능.

단점!
16시간의 재생은 뻥. 전원을 off할 시 대기상태 12시간을 지내는 고로 밧데리를 잡아먹는다.
(이 문제는 펌웨어 업그레이드로 대기상태를 1시간으로 줄일 수 있음. 고객들은 선택할 수 있게 해달라고 요청 중)
디자인은 사진빨. (이러한 리뷰가 많다.)
버튼에 불이 안들어오는 고로 어두운 곳에서 조작 불가. (LCD화면과 LED등 3개만 불이 들어옴)
재질 상의 문제로 지문이 많이 남음.
그래도 터치.



4. YEPP의 K3
사용자 삽입 이미지

이것도 삼성. 음질은 좋겠지. 지금까지 소개한 것과 달리 유일하게 컬러 LCD를 가짐.

장점!!
가격이 떨어질대로 떨어졌다. (2G가 6~7만원. 소싯적엔 10만원 넘게 나갔다.)
얇다. 매우 얇다. ㅋㅋ
재생시간 25시간. (베리굳!!!!!)
컬러 LCD! 큰 LCD!

단점.
50g의 무거움?!!(사실 별로 무겁진 않은데; 다른거에 비해서)
열받는 터치-_-)!!
대박 지문.... -_-);;;
U3와 U4의 단점을 갖추고 있구나....



5. 소니의 NW-E015 (일명 립스틱)
사용자 삽입 이미지
디자인이 제일 맘에 든다. 컬러는 다섯가지 있는데 다 마음에 든다.

장점.
디자인!
소니의 메리트!
컬러 LCD!
1시간 충전 30시간 재생!
29g 가벼움!

단점.
USB 이동식 디스크를 지원하나, 소니스테이지를 써야만 음악재생이 된다. (소니스테이지 즐;ㅁ;)
USB 단자가 뚜껑으로 닫혀있어 뚜껑을 잃어버릴 염려가 있음.
2G 7~8만원으로 위에 소개한 녀석들에 비해 비쌈.



결론.
디자인은 립스틱이 제일 맘에드나, 소니스테이지 때문에 YEPP으로 가야겠다.
문제는,, U3냐 U4냐.... ㄱ-);;;;;
개인적으로 터치를 매우 싫어해서 아이리버도 땡기지만, 치명적 버그가 있어서..
다시 U3냐 U4냐 상태로 돌아왔다.
K3도 매우 좋고, 보라색 기기도 있지만, 다른 녀석들에 비해 너무 무겁다.
그래서 U3냐.. U4냐.. ㄱ-);;;;

2008년 10월 23일 목요일

춘천여행 - 김유정 역


춘천에 "김유정 역" 이라는 역이 있다.
기차를 타고 가다 보면 나오는 "김유정 역".
그곳을 가보게 되었다.

김유정은 소설가로 고등학교 문학/국어 책에 나오는 "봄봄", "동백꽃" 등의 유명한 소설을 지으신 분으로 춘천에서 11편의 작품을 냈다고 한다.


새벽같이 일어나 버스를 타러 갔다.
"김유정역"을 가보고 싶었던 터라 기차여행으로 가고 싶었지만, 청량리역에서 출발하는 그 기차를 타기에는 우리집이 너무 멀었다. 8시 반쯤 버스에 올라타고 버스가 출발하였는데, 일찍 출발한다고 출발했지만 팔당대교는 막히고 있었다. 서울 시민들의 수원을 타고 계속 올라가 춘천에 도착하였다.

춘천에 도착하고 가장 먼저 한 일은 닭갈비를 먹는 것!! 춘천닭갈비+_+)!!
누군가한테 들은 바로는 닭갈비와 막국수를 같이 하는 집은 가짜라나-_-;;; 하여 닭갈비만 하는 집으로 가서 닭갈비를 배터지게 먹었다. 실제로 서울보다 맛있었다. 이런 맛에 맛집을 찾아다니는 건가 싶기도 하고, 암튼 맛있어서 나중에 택배로 시켜먹으리라 생각도 했지만 명함을 안들고 나왔다. 젠장.

그리고 도착한 김유정역.
사용자 삽입 이미지
사람이름으로 역이름을 지정하게 된 것은 김유정역이 최초라고 한다.
사용자 삽입 이미지
김유정 역 앞에는 코스모스가 가을분위기를 내고 있었다. (사진이 좀 어둡네-_-;)
사용자 삽입 이미지

그리고 김유정로를 따라 걸으면 김유정 문학촌이 보인다.
사용자 삽입 이미지

돌담이 이뻤던 김유정 문학촌.
사용자 삽입 이미지

김유정 문학촌 맞은 편에 있던 실레마을.
초가집으로 지어진 집들이 모여있어 참 한적하고 고요한 분위기였지만, 보안시스템이 가동되고 있다는 스티커가 좀 씁쓸했다.
사용자 삽입 이미지

김유정 문학촌안으로 들어가보면, 높다란 곳에 서계시는 분이 보인다.
바로 김유정소설가.
누가 이 사진을 보고 "김유정이 남자였어?!" 라고 물었다-_-; (소싯적에 국어공부 좀 하셨네;)
동상으로 보면 훤칠하니 잘생긴 듯 하다.
사용자 삽입 이미지


정자... 로 추측되는 곳.
이곳에 올라 앉아있으면 저절로 시한구절이 떠오를 듯 하다.
정자아래는 호수가 있고, 정자 지붕쪽으로는 버드나무가 드리워져 있어, 정자에 걸터앉아 호수를 바라보고 있으면 버드나무 잎이 하늘하늘 떨어져 호수에 둥둥 떠다니는 모습을 볼 수가 있는데 호수 물이 정말 깨끗해서 장관이다.
사용자 삽입 이미지


김유정 기념 전시관.
김유정이 살아왔던 이야기들과 김유정의 각종 소설이 옛 한글로 쓰여있는 것을 볼 수 있다.
자고로 박물관(?) 안에서 사진촬영은 예의가 아니라서 자제했다. (자제만 했다;)
사용자 삽입 이미지

기념전시관에서 받은 소책자. (팜플렛?)
제목만 영어라 안심했다.
안에는 김유정 소설에 관한 내용과 춘천과 소설의 관련성 같은 가볍게 읽어볼 수 있는 재밌는 이야기들이 있다.
사용자 삽입 이미지
가장 흥미로웠던 것은, 김유정 소설 "동백꽃"에 나오는 동백꽃이 우리가 아는 동백꽃이 아니라는 것.
우리가 아는 동백꽃은 빨간 꽃인데(가끔 보면 아파트 단지에도 심어져 있음) 소설 속의 동백꽃은 생강나무 꽃을 의미한다고 한다. 생강나무 꽃은 생강향(?)을 풍기는 노란 꽃으로 강원도 사투리로 동백꽃이라고 한다는 것이다. 몰랐던 사실이었다. 신기할 따름.

오늘의 베스트컷. 이게 호랑나비 던가?
꽃에 앉아있는 나비나 벌이 많아서 많이 찍었더랬다.
오늘 함께해준 F40 나의 디카 땡쓰+_+)/
사용자 삽입 이미지



급하게 계획하고(사실 계획도 없이) 떠나게 된거라 허술하기 짝이 없었지만,
혼란스러웠던 마음을 정리하고자, 그리고 부쩍 우울해졌던 요즘의 일상을 탈피하고자 하는 일탈의 의미로 다녀온 하루도 되지 않는 짧은 여행으로는 참 좋았다.

따듯한 날씨에 가을바람. 그리고 산국향기.
넉넉하게 시간잡아 기회되면 한번 더 가야지.


컴퓨터 견적서.


9월달에 하나 뽑은 컴퓨터 견적서.
100만원 기준으로 뽑았는데, 모니터 빼니까 70만원정도.
대충 65만원에 합의 봤다.ㅎ


CPU: 인텔 코어2 듀오 울프데일 E8400
Mboard: 아수스 P5Q SE(P45)
RAM: 삼성 DDR2 1G SDRAM(PC2-6400)
Graphic: MSI 지포스 N9600GT-T2D256 GDDR3 256MB Red Moon FRESH
Hard: 씨게이트 바라쿠다 시리얼 ATA 7200.11 320G
CD-RW: SATA 20배속 LG DVD-Multi GH-20NK (DVD RW)
Power: 히로이찌 HEC Windmill PRO 400 (400W/일반)

그리고 키보드, 마우스, 케이스,
LCD모니터는 LG 플래트론 22인치 와이드 28만원선에 골라놨는데 너무크대서 뺐다.
RAM은 물론 두개 끼고.
이렇게 하면 70만원 선.

가격면에서 합의 본것이 그래픽 카드.
물론 그래픽 작업을 많이 하긴 하지만, 게임을 할 건 아니니까 9500GT 다크초코릿 모델로 했다. 약 3만원정도 싸다.

메인보드를 아수스로 할까 기가바이트로 할까 겁내 고민하다가 결국 많이 써왔던 기가바이트로 했다. (5만원정도 싸기 때문이 아니다.ㅠㅜ)

그래서 최종 결론은
Mboard: GIGABYTE GA-EP31-DS3L
Graphic: 지포스 9500GT BAXTER 다크초콜릿 O.C Edition GDDR3 256MB

..해서 63만원선에서 맞추고, 귀찮으니 조립해 달래서 2만원 추가-_-);
65만원이 조금 넘는 가격으로 했다.

음... 아무리 생각해도 LCD가 너무 아깝다.ㅠ

2008년 10월 16일 목요일

달콤한 나의 도시


정이현 작가님의 "달콤한 나의 도시".
이 책을 처음 만난건 어느 선배의 방이었다. 사람들과 모여 다같이 우르르 술마시러 찾아간 학교 선배의 방에서 처음 만났다. 책 표지가 맘에 들어서 선배한테 물어봤고, 선배는 아직 보지 못했다고 하면서 책을 살 때 주었다는 다이어리를 내게 주었다. 그리고 나는 술에서 깨기전 그 책을 잠시 읽었고, 끝까지 읽지는 못하고 아쉬움과 함께 뒷 이야기를 남겨 두었다.

이 책을 계속 장바구니에 담아두었지만 살 기회는 흔치 않았다. 그러던 어느 날, 동생에게 온 서점 택배. 그 상자안에 이 책이 있었다. 그 날 당장 먼저 읽겠다고 뺏어서 들고 다녔다.

나는 버스를 타면 책을 읽는 버릇이 있는데, 책을 읽다 간혹 내려야 할 정류장을 지나치곤 한다. 그런데, 12시가 넘어 저녁에 아슬아슬하게 탄 버스에서 정류장을 지나치고 말았다. 그것도 20분이나 더 가버렸다. 시간은 1시가 되가고, 내린 곳은 어딘지 가늠할 수 없었던 데다가 가장 중요한 건 차가 없을지도 모른다는 거였다. 바로 이 책 때문에!! 그 날의 일기를 쓰면서 '정이현 작가, 두고보자' 라고 생각했던 것이 기억난다.

굉장히 재밌게 읽었다. 결말도 까지도 좋았다.

그리고 나서 드라마 전편을 보았다. 책과는 약간 다른 내용이 섞여 있었지만, 그래도 주제는 크게 변하지 않은 달콤한 나의 도시 드라마 편. 덕분에 며칠간의 불면증을 달랬다.

나는 가끔 재밌게 읽은 책의 등장인물들을 스케치 해본다. 내가 생각한 이미지 대로.
최강희나 지현우, 이선균 등이 내가 생각했던 책의 등장인물들과는 약간 달랐지만, 그 나름대로 또 좋았다.ㅎ (특히, 최강희가 너무 이뻤다!)

이선균은 내가 좋아하는 배우다. 목소리가 캡짱 멋있다고 생각한다. 근데, 이 드라마에서 보니까 웃는 모습이 특히 멋지더라.ㅎ 최강희는 뭘 해도 이쁘다-_-)b


내가 만약 오은수였다면, 나는 유준이의 손을 잡았을 거다.
내가 만약 남유희였다면, 나는 회사를 때려치지 못했을 거다.
내가 만약 하재인이었다면, 나는 처음부터 결혼을 안했을 거다.
내가 만약 윤태오였다면, 나는 오은수를 몸바쳐 사랑하지 못했을 거다.
내가 만약 김영수였다면, 나는 처음부터 오은수를 내인생에 들여놓지 않았을 거다.ㅡ였지만, 드라마를 보고난 후에 마음이 바뀌었다. (아마도 이선균 탓)ㅡ 나는 김영수 였음을 후회하고 오은수와 함께 행복해지길 노력했을 거다.

내가 만약 이들이었다면, 이 책의 스토리도 더 진행될 수 없었겠지.ㅋㅋ 그래서! 나는 책속의 주인공도 드라마 속의 조연도 될 수 없는 거다. 그러나!! 비록 엑스트라도 못될 만큼 일지라도, 내 인생에서 만큼은 주인공이길. 드라마 속 오은수의 말대로 내가 나인게 다행으로 느껴질 때도 있으니까.






그들은 어딘지는 몰라도
어떻게든 어디에든지 있어
말이 없고 잊어버려져 있지만
몹시도 충실히 있는 것이다!

- 인생의 대지 -

2008년 10월 15일 수요일

autogen 사용


1. Makefile.amMakefile.in을 복사해온다. (귀찮으니까)


2. 컴파일 할 소스와 같은 디렉토리 내에 있는 Makefile.am을 열어서 실행파일 이름을 바꾼다.
noinst_PROGRAMS 라고 되어 있는 부분에 이름을 바꾸면 된다.
이 이름을 바꾼후에 OURCES와 LDADD도 실행 파일이름으로 바꾸어 주어야 한다.
만약, 실행파일 이름이 test라면,

noinst_PROGRAMS = test
test_SOURCES = 소스파일
test_LDADD
... 이런식으로 수정한다.


3. 만약 상위디렉토리가 있다면 그곳에 있는 Makefile.am도 수정한다.
SUBDIRS에다가 새로 만든 디렉토리 이름을 추가한다.


4. autogen이 있는 곳에 configure.ac 라는 파일을 수정한다.
AC_CONFIG_FILES 에 현재 디렉토리로부터 새로 만들 Makefile의 경로를 써준다.


5. autogen실행
$ ./autogen.sh
아무런 메세지가 뜨지 않은 다면 성공.


6. 적절한 옵션과 함께 configure하고 나면 4단계에서 지정해준 경로에 Makefile이 생성되어 있을 것이다.


7. 컴파일 한다.
$ make
그럼 실행파일이 생성된다.

2008년 10월 9일 목요일

EnC가방



EnC에서 거금을 주고 가방을 하나 샀다.
이모가 주고 갔던 상품권으로,

롯데백화점 1층부터 9층까지 꼼꼼히 봤는데도, 그게 디자인이나 색이 제일 맘에 들어 결정했다.
근데, DP된 물건밖에 없다고 해서 주문을 했다.
다음주 화요일날 온다고 했고,
수요일마다 잠실에 나오는 친구한테 부탁을 해서 받아다 달라고 했다.

그리하여 어제 받은 내 가방.
여름 정장 정도는 살 수 있을 법한 가격의 내 가방.

왠일이니-_-
지난주에 봤던 DP해둔 물건이었다.
그러니까 나한테는 거짓말을 하고 DP된 물건을 고스란히 보내온 것이다.

와.... -_- 빡친다....
내가 무려 6일을 기다려서 받은게 이정돈가?
처음부터 DP된거 밖에 없으니 가져가라고 하든가.

전화해서 따질까도 했지만, 다른 물건을 확인하고 들고 온대도 이미 신뢰가 깨져 못믿을 것 같다.
잠실까지 나가는것도 돈이며 시간이며 왕창 깨지고,

다시는 EnC에서 물건 주문 안하겠다.

다른건 몰라도 신뢰를 배신하는 매장은 절-_-대-_- 상종안한다.

생각같아선 확 반품해버리고 싶다.
아무리 이쁘고 디자인이 좋아봤자, 그모양의 브랜드라면 별로 안갖고 싶다.

2008년 10월 1일 수요일

트럭


트럭.

주연: 유해진(정철민 역), 진구(김영호 역)
감독: 권형진


초반엔 겁나 긴장되고 무서웠으나, 결말이 흐지부지 했다.

딸의 수술비를 마련하기 위해 고군분투하던 트럭 야채장사 철민은 살인장면을 목격하게 되고,
목격을 이유로 죽음을 당하기 직전에 거래를 하게 된다.
시체를 처리해 주면 돈을 주고 살려주겠다는 말에 처음에는 하는 수 없이 그러겠다고 했지만, 딸을 위해서라도 꼭 성공하겠다고 마음먹는다.

마음졸이며 자신의 트럭에 살해당한 시체를 실고 강원도로 향하던 도중 교통사고를 목격하게 되고 그 사고에서 살아남은 한 경찰을 트럭에 태우게 된다.
경찰은 조금 전 있었던 사고에서 한 살인자가 탈주하게 되었다면서 고성까지만 같이 가달라고 부탁하고, 철민은 선택의 여지 없이 고개를 끄덕이지만 옆좌석에는 경찰, 뒤에는 시체가 있는 상황에서 불안감만 더해간다.



공포스럽거나 하지는 않지만 심리적으로 굉장히 긴장하게 만드는 영화였다.
그러나 결말이... 재미도 없고-_-; 감동도 없고-_-; 그래서 약간 맥이 풀렸다.

흥행에 성공할 수 있을지의 여부는 잘 모르겠지만, 나는 볼만한 영화였다고 생각한다.
진구의 연기와 유해진의 연기가 굉장히 팽팽했다고나 할까.ㅎㅎ
그리고 유해진의 딸역을 맡은 아역이 매우+_+! 귀여웠다>_<) 꺄하하;

aumix 명령어


.aumix.rc 파일을 만들어 두면 편하다
$ vi .aumix.rc

소리 값을 지정해 준다.
-----------------------------------------------------------------------------------------
vol:56:56:P
pcm:56:56:P
speaker:56:56:P
line:56:56:P
mic:80:80:R
cd:48:48:P
pcm2:100:100:P
igain:60:60:P
line1:36:36:P
dig1:100:100:P
phin:36:36:P
phout:48:48:P
video:36:36:P
-----------------------------------------------------------------------------------------


그리고 다음과 같이 실행시킨다.
$ aumix -L -f .aumix.rc

그리하면 설정한 소리 값 대로 소리가 나온다.
처음에 저것을 설정해 주지 않으면 아무 소리가 들리지 않을 수 있는데,
그것은 사운드카드나 스피커 문제가 아니라 vol이 0으로 되어있기 때문이다-_-;

2008년 9월 19일 금요일

wav file bit rate 구하기


bit rate = channel * data bit * sampling rate
bit rate는 위와 같이 구한다.
channel이라든가 data bit 등의 정보는 wave file의 header에 모두 들어있다.

만약 channel이 2이고, data bit가 16, sampling rate가 44100이라고 가정하면,
bit rate(초당 비트율)는 1,411,200이 된다.
즉, 초당 1,411,200bit만큼 file을 읽어 play를 한다는 소리가 되겠다.
이것을 byte로 환산하면 1,411,200/8 = 176,400byte가 된다.


1394에서 메세지는 정해진 주기에 맞춰 slot에 들어있는 값을 읽어오니까,
주기는 1/1000초로 주고 176.4byte씩 보내면 실시간으로 들어온다는 가정하에 buffering없이 음원을 출력할 수 있다.

허나, 이것을 주장했다가 "제너럴 하지 못하다" 라는 이유로 퇴짜맞았다:D

2008년 8월 8일 금요일

libstdc++.so: undefined reference to 불라불라

/opt/TMO-Linux/buildroot/build_i386/staging_dir/lib/gcc/i386-linux-uclibc/3.4.6/../../../../i386-linux-uclibc/lib/libstdc++.so: undefined reference to `__towupper_l'
/opt/TMO-Linux/buildroot/build_i386/staging_dir/lib/gcc/i386-linux-uclibc/3.4.6/../../../../i386-linux-uclibc/lib/libstdc++.so: undefined reference to `__freelocale'
/opt/TMO-Linux/buildroot/build_i386/staging_dir/lib/gcc/i386-linux-uclibc/3.4.6/../../../../i386-linux-uclibc/lib/libstdc++.so: undefined reference to `__wcscoll_l'
/opt/TMO-Linux/buildroot/build_i386/staging_dir/lib/gcc/i386-linux-uclibc/3.4.6/../../../../i386-linux-uclibc/lib/libstdc++.so: undefined reference to `__strcoll_l'
/opt/TMO-Linux/buildroot/build_i386/staging_dir/lib/gcc/i386-linux-uclibc/3.4.6/../../../../i386-linux-uclibc/lib/libstdc++.so: undefined reference to `__wcsftime_l'
/opt/TMO-Linux/buildroot/build_i386/staging_dir/lib/gcc/i386-linux-uclibc/3.4.6/../../../../i386-linux-uclibc/lib/libstdc++.so: undefined reference to `__strxfrm_l'
/opt/TMO-Linux/buildroot/build_i386/staging_dir/lib/gcc/i386-linux-uclibc/3.4.6/../../../../i386-linux-uclibc/lib/libstdc++.so: undefined reference to `__wctype_l'
/opt/TMO-Linux/buildroot/build_i386/staging_dir/lib/gcc/i386-linux-uclibc/3.4.6/../../../../i386-linux-uclibc/lib/libstdc++.so: undefined reference to `__iswctype_l'
/opt/TMO-Linux/buildroot/build_i386/staging_dir/lib/gcc/i386-linux-uclibc/3.4.6/../../../../i386-linux-uclibc/lib/libstdc++.so: undefined reference to `__nl_langinfo_l'
/opt/TMO-Linux/buildroot/build_i386/staging_dir/lib/gcc/i386-linux-uclibc/3.4.6/../../../../i386-linux-uclibc/lib/libstdc++.so: undefined reference to `__strtold_l'


요딴 식의 에러 해결법

GCC버전 upgrade. 4.2.X로

근데, GCC를 업그레이드 하면 옛날 소스가 안돌아 간다. 니미.ㅠ

2008년 8월 5일 화요일

grub login


오류라고 말하긴 뭐하지만,
무슨파일이 어떻게 바뀐건지 부팅이 되고난 후 login을 하는 부분에서 자꾸 password를 물어본다.
난 비밀번호 지정해 준적도 없고;ㅁ; 비밀번호가 뭔지도 모른단 말이다;ㅁ;

이를 해결하는 방법은 두 가지가 있다.


grub 명령어 kernel에 옵션으로 "single"을 주는 방법.
그러면 login없이 바로 부팅된다.

kernel /bzImage ... 어쩌고 저쩌고..... single


/etc/passwd 파일 수정.
이 파일을 열어보면, 맨 첫 번째 줄에
root:x:0:0:root:/root:/bin/sh 이라고 되있는 것이 보일 것이다.

여기서 'X'라는 것은 비밀번호가 어딘가 있다는 뜻이므로 이걸 삭제해 버리면 된다.
root::0:0:root:/root:/bin/sh

그럼 비밀번호 없이 login가능-_+)b

2008년 8월 4일 월요일

filesystem type is tftp, using whole disk


나를 몇 주간을 괴롭히고 몇 일간을 밤을 새우게 하고, 담배 무는 시간을 늘렸던 골칫덩이 에러-_-)!
filesystem type is tftp, using whole disk!!

.... 5분도 안되서 에러를 잡아주셔서 감사합니다만, 제가 너무 비참해지는군요.ㅠㅜ

원인은 방화벽이었다.
tftp에 방화벽이 설정되어 있어서 booting image를 받지 못했던 것.

실로 나를 좌절하게 만드는 에러가 아닐 수 없다.ㅠㅜ

한고비 넘겼다 싶었더니만, 이번엔 kernel panic이구나... 닝기미...



리눅스에서 윈도우 원격접속

리눅스에서 윈도우로 원격접속을 하려면 여러가지 방법이 있지만, 그 중에 rdesktop을 이용하는 것이 가장 일반적이다.

rdesktop으로 원격접속을 해보자.


1. install

rdesktop 다운로드
다운로드를 받고 압축을 푼다.

압축을 푼 디렉토리로 이동하여 다음 명령어를 수행한다.
$ ./configure (몇몇 패키지가 설치되어 있지 않다고 투덜대면 패키지를 설치하고 다시 한다.)
$ make
$ make install


2. 사용하기

위와 같은 방법으로 rdesktop을 설치하였다면 이제 사용하면 된다
$ rdesktop -a 16 -f  ipaddr

-a는 해상도 옵션(16bit을 의미)
-f는 fullscreen이다.

윈도우 화면이 뜰 것이다+_+!
와우.

2008년 8월 1일 금요일

파일 업로드 에러!


보드로 실행파일을 업로드하여 에러가 생기는 걸로 삽질 3일째-_-.
tftp로 올려도 안되고, nfs로 올려도 안된다-_-);;;
자꾸 이 놈시끼가
-sh : ./a.out: not found 를 연발한다;

파일이 있는데도 not found를 연발하는 것은 무슨 문제일까... 싶어 여러분의 조언을 구했다.

그래서 나온 결론은 파일은 있지만 library가 없다!!! 라는 것.

실제 실행파일은 library를 포인터로 가리키고 있다. 필요할 때마다 가져다 쓸 수 있도록.
그러나 보드에 library가 올라가 있지 않을 경우에는 library를 찾지 못한다는 거다.
(그럼 library를 못찾겠다고 하든가-_-; 다짜고짜 not found라니, 건방진 자식)

해결책은 컴파일을 할 때 "library를 포함시켜 컴파일 한다" 는 것이다.

내가 사용한 파일은 C++파일이므로, 다음과 같이 컴파일 하였다.

$ g++ -static test.cpp

이 때 생성되는 a.out파일은 용량이 무지하게 커져버린다-_-);
그러나 보드에서 실행이 된다-_-)b


덧, 파일용량이 너무 커진다 싶으면 strip옵션을 준다.
실행과 관련없는 내용을 지워버리는 옵션이다.

ifconfig: command not found


root 권한을 주었는데도 ifconfig명령어가 계속 실행되지 않는다-_-)!!!!
봐야될거 아니야!!!!

일반유저가 "su" 명령을 사용해 root권한을 받게 되면, 슈퍼유저의 command를 사용할 수 있다.

내가 지금 사용하고 있는 것은 centoOS 5로 페도라와 같은 기반이지만, 요게 안되는 거다-_-

그래서 좀 알아봤더니, 제대로 root권한을 주기 위해서는
"su - root" 라고 해야 지대로 된 root권한을 받게 된다는 거다.ㅎ

이걸로 했더니 ifconfig 등의 명령어가 드디어 동작한다-_ㅠ 흑...

nfs 설치

1. install
  우선, nfs 패키지를 인스톨 해야한다.

  $ yum install nfs-util (맞나? 암튼 비슷한 이름의 패키지이다;;)


2. 설정
  /etc에 가보면 exports라는 파일이 있다.
  그 파일을 열어보면 아무것도 없을 수도 있고, default로 뭔가 저장되어 있을 수도 있다.
  이 파일을 수정하여 nfs를 동작하게 한다.

  /nfsroot localhost(rw,insecure,root_squash)
  /nfsroot 192.168.11.*(rw,insecure,root_squash)

  이런식으로 설정해 줄 수 있다.
  /nfsroot는 서버의 nfs directory이며 localhost라든가 192.168.11.* 등의 address는 이 폴더(nfs directory)에 접근할 수 있는 권한을 줄 client를 말한다. 그리고 괄호안에 들어가있는 내용은 권한에 관련된 것이다.


3. 재시작
   $ /etc/init.d/nfs restart

  설정을 변경해주었으므로 재시작 한다.


4. 테스트 하기
   잘 설치되었는지 보려면 테스트를 해본다.
   $ mount -t nfs localhost:/nfsroot /temp
   라고 입력하면 자기 컴퓨터의 /temp와 /nfsroot가 연결된다.

  /nfsroot에 파일을 생성하거나 수정을 하면 /temp에도 똑같이 적용된다.

2008년 7월 25일 금요일

IEEE1394 setting


이 시스템은
서버에서 tftp를 통해 커널 이미지를 가져오고,
nfs를 통해 파일시스템을 가지고와 실행하는 하드 없는 컴퓨터 이다.

부팅은 DOM에서 이루어지며 부팅과정에서 서버에 있는 이미지와 파일 시스템을 받아온다.
이 과정이 이루어지기 위해서는 약간의 환경설정이 필요하다.

우선, tftp와 nfs가 설정되어 있어야 한다.
설정하는 방법은 아래 링크를 참조하면 된다.

tftp설정
nfs설정

IEEE1394의 컴파일이 끝났다면 커널 이미지가 생성되었을 것이다.
커널이미지의 경로는
/opt/TMO-Linux/kernel-2.6.10-TMO/arch/i386/boot/bzImage 이다.
이 파일을 tftpboot로 옮겨둔다.

또한 buildroot컴파일이 끝났다면 파일 시스템이 생성되어 있을 것이다.
파일 시스템의 경로는
/opt/TMO-Linux/buildroot/project_build_i686/uclibc/root/ 이다.
하위에 파일시스템이 생성되어 있는데 하위에 있는 모든것을 nfsroot로 옮겨주어도 되지만, 그것보다는 이 경로를 link를 걸어주는 것이 좋다.

$ ln -s /opt/TMO-Linux/buildroot/project_build_i386/uclibc/root/ nfsroot


처음 client와 server를 연결하고 부팅을 시키면 grub설정을 바꿀 수 있는 창이 뜨는데, 아무것도 하지 않으면 그대로 부팅이 되고 재빨리 'e'를 눌러주면 edit로 넘어가게 된다.
설정을 바꿔 줘야 하는 부분은 ifconfig과 kernel image, file system의 경로, 시리얼 설정 이다.

ifconfig와 kernel항목을 수정하자.

grub edit> ifconfig --address=192.168.1.11 --server-192.168.1.254
grub edit> kernel /bzImage root=/dev/nfs rw nfsroot=192.168.1.254:/tftproot/nfsroot/ ip=192.168.1.11:192.168.1.254:255.255.255.0:tmo:eth0 console=ttyS0, 115200n8 ide1=noprobe ide2=noprobe ide3=noprobe ide4=noprobe ide5=noprobe hdb=none ide-delay=10

저장하고 'b'를 눌러 부팅시켰을 때, 잘 된다면 OK! 안된다면 삽질의 나락으로 떨어지게 된다.


부팅할 때마다 ifconfig와 kernel 항목을 수정하는 것은 매우매우매우-_- 귀찮은 일이므로, boot 설정을 바꾸는 방법을 알아보자.

보드가 부팅되고 난 뒤 다음 명령어를 실행시켜 boot설정을 저장한다.

$ mount /dev/hda1 /mnt
$ vi /mnt/boot/grub/menu.lst
설정을 바꾸고 :wq 하여 저장한 후 빠져나온다.

2008년 7월 21일 월요일

bootloader porting with T32

BOX-X에 redboot을 포팅하는데 2주 걸렸다-_-) 이런, 수박바.

정말.. 끝내주는 삽질이었다-_-;

우선 T32를 이용한 cmm파일은 다음과 같다.
========================================================================================
B::

RESET
SYSTEM.OPTION waitreset.on
SYSTEM.CPU PXA255
SYSTEM.UP

Break.RESET
FLASH.RESET
FLASH.CREATE 0x00000000--0x3fffff 0x20000 I28F001J3 BYTE
FLASH.ERASE ALL
print "erase done"

FLASH.PROGRAM ALL
DATA.LOAD.binary Y:\x-station\u-boot-1.2.0-xstation\u-boot.bin 0x0 /word
FLASH.PROGRAM OFF
ENDDO
===========================================================================================

그리고 삽질끝에 알아낸 memory controller register value!!
보드는 CPU - PXA255에 flash - Inter strata flash 28F128이다.

D.S 0x48000000 %l 0x00000000 ;MDCNFG
D.S 0x48000004 %l 0x03CA4FFF ;MDREFR
D.S 0x48000008 %l 0x7FF07FF0 ;MSC0
D.S 0x4800000C %l 0x7FF07FF0 ;MSC1
D.S 0x48000010 %l 0x7FF07FF0 ;MSC2
D.S 0x48000014 %l 0x00000000 ;MECR
D.S 0x48000018 %l 0x00000000 ;SXLCR
D.S 0x4800001C %l 0x00040004 ;SXCNFG
D.S 0x48000020 %l 0x01FE01FE
D.S 0x48000024 %l 0x00000000 ;SXMRS
D.S 0x48000028 %l 0x00000000 ;MCMEM0
D.S 0x4800002C %l 0x00000000 ;MCMEM1
D.S 0x48000030 %l 0x00000000 ;MCATT0
D.S 0x48000034 %l 0x00000000 ;MCATT1
D.S 0x48000038 %l 0x00000000 ;MCIO0
D.S 0x4800003C %l 0x00000000 ;MCIO1
D.S 0x48000040 %l 0x00220022 ;MDMRS
D.S 0x48000044 %l 0x00000008 ;BOOT_DEF
D.S 0x48000058 %l 0x00000000 ;MDMRSLP

비록 cmm파일에 쓰이지 않았지만, 삽질의 결과다-_ㅠ) 흑흑..

2008년 7월 4일 금요일

redboot올릴 보드#2

IMO보드에 이어서 받은 보드는 타이눅스 BOX-X.

CPU: PXA255(Intel)
SDRAM: MT48LC8M16(Micron)
Flash: Strata E28F128(Intel)


아쉽게도 이 보드를 만든 팜팜테크가 현존하지 못해... 혼자 삽질해가야 겠다.ㅠ
bootloader라도 있어 다행이지만,

현재... flash날라간 상태.

여름 맛집

아이스크림
- 삼청동 북까페내서재, 이대앞 하루에, 신촌 구스띠모

팥빙수
- 이대 빵사이에낀과일, 장충동 태극당, 홍대 인클라우드, 압구정 밀탑, 압구정 미마라, 혜화역 델리

모밀
- 광화문 미진, 우진, 강변 후원쟁반막국수모밀

냉면
- 동대문 평양면옥, 을지로 을지면옥, 종로 곰보냉면

김치말이밥
- 무교동 이북손만두집, 삼성동 눈나무집, 우래옥

한정식
- 수원 고구려

삼계탕
- 시청 장안삼계탕, 서대문 동해별관, 경복궁 토속촌, 명동 백제삼계탕

추어탕
- 강남 원주추어탕, 덕수궁 남도식당, 영등포 남원추어탕, 무교동 용금옥

2008년 4월 28일 월요일

REDBOOT (ver. smdk2410)

 
<< REDBOOT 소스 분석 >>



시스템이 시작되는 곳

arm.ld 소스보기





exception handler 중 reset_vector

vector.S 소스보기





platform마다의 다른 설정(arm9/smdk2410에 맞게 설정)
hardware에 dependent하다.

Hal_platform_setup.h 소스보기





memory management unit 초기화 및 TTB, virtual memory 설정

Smdk2410_misc.c 소스보기

2008년 4월 16일 수요일

프로세스 스케줄링

 


1. 스케줄링

스케줄링의 대상: ready/running상태에 있는 프로세스와 스레드. (kernel process는 스케줄링의 대상이 아님)

스케줄링 queue = ready queue (blocked queue에 있는 것은 스케줄링의 대상이 아님)

스케줄링 = 프로세스를 선택하는 스케줄링 알고리즘 + context_switch(디스패처)

종류: 장/단기 스케줄링, 선점/비선점 스케줄링



2. 스케줄링 알고리즘

­ 시스템의 형태에 따라 기준이 달라진다.

­ 기준의 평균치 최적화와 편차의 최소화를 고려하여 공평하게 해야한다.


선점/비선점 스케줄링

선점 스케줄링: running process로부터 CPU를 뺏을 수 있다. time slice나 priority에 의해서.

ex. Round-robin, Multi-level Queue, Multi-level feedback Queue

비선점 스케줄링: CPU를 빼앗지 못함. time slice가 없고, blocked될 때 CPU를 반환한다.

ex. FCFS(FIFO), SJF, priority algorithm,



3. 비선점 스케줄링

가. FCFS 스케줄링

­ 프로세스 도착순서대로 CPU를 배정한다.

­ 단점: 호위 효과 문제(긴 작업을 수행 하느라 여러 개의 짧은 일이 대기하는 비효율적인 상태)

­ 사용: 장기스케줄러, time slice를 적용하지 않는 시분할 시스템


나. SJF 스케줄링

­ 최단시간이 걸리는 작업에 CPU를 우선적으로 배정한다.(Shortest Job First)

­ 평균대기시간(waiting time)에 있어서 가장 효율적인 알고리즘.

­ 단점: 모든 프로세스의 CPU요구시간을 알기가 어려움, 단기 스케줄링 단계에서 구현하기 어려움

­ 사용: 장기스케줄링을 하는 일괄처리 시스템(작업시간의 제한을 줄 수 있다).


다. 우선순위 알고리즘 스케줄링

­ 각 프로세스 마다 가지고 있는 우선순위를 가지고 우선순위가 가장 높은 프로세스에게 CPU를 할당

­ 우선순위가 같은 경우 FCFS로 처리된다

­ SJF는 우선순위 알고리즘의 특수한 형태이다.

­ 내부적 우선순위: 제한시간, 기억장소 요구량, 사용하는 파일 수, 평균 CPU 버스트, 입출력 시행 비율

­ 외부적 우선순위: 사용료, 정책적인 변수

­ 단점: 기아 발생 (에이징으로 해결할 수 있다)



4. 시분할 시스템의 선점 스케줄링

1) time slice를 소진하여 CPU를 반납하거나 높은 priority의 프로세스에게 CPU를 빼앗긴다.

2) 연산위주 프로세스(CPU bound)/입출력위주 프로세스(I/O bound)에 따라서, 평균 CPU 반환시간(CPU burst)에 따라서, 실시간 프로세스/일반 프로세스에 따라서 동적 우선순위를 가진다.

3) I/O bound process에게 더 높은 우선순위를 주고, 실시간 프로세스에게 더 높은 우선순위를 준다.

4) time slice는 너무 작으면 context_switch overhead가 커지고, 너무 크면 비선점 스케줄링(FCFS)이 될 수 있으므로 평균 CPU 반환시간보다 약간 큰 것이 좋다.

5) non-preemptible kernel의 경우 선점 스케줄링을 사용해도 커널 모드에서는 선점이 일어나지 않는다.


가. Round Robin 스케줄링

­ 실행중인 프로세스가 time slice를 다 쓰면 ready queue의 맨 뒤로 보낸다.

­ time slice를 다 쓰지 않았더라도 I/O 요청을 하면 blocked되고 CPU를 반납한다.

­ 우선순위가 같은 프로세스들끼리의 스케줄링이며 priority가 높은 프로세스는 우선된다.

­ 시분할 시스템을 위해 고안


나. 다단계 Queue 스케줄링

­ 우선순위마다 ready queue를 가지고 있다.

­ 일반적으로 fixed priority를 가지며 같은 level의 queue에서는 RR이나 FCFS를 사용한다.

­ 시스템형, 대화형, 일괄처리 등의 프로세스 성격에 따라 우선순위를 부여한다.


다. 다단계 Feedback Queue 스케줄링

­ fixed priority가 불공평성이 있으므로 kernel이 상황에 따라 priority를 조정한다.

­ time slice를 소진해서 CPU를 반납할 경우 priority를 떨어뜨린다. (CPU bound process)

­ CPU를 많이 사용할수록 priority가 낮아지는 특징이 있다.

­ 너무 오랫동안 CPU를 사용하지 못한 프로세스의 priority를 올려주기도 한다.

­ priority가 낮을수록 CPU를 많이 사용하는 프로세스이므로 경우에 따라서 time slice를 많이 줄 수도 있다.



5. Linux의 스케줄링 정책

가. SCHED_OTHERS (일반 사용자 프로세스)

­ time slice 존재, dynamic priority(kernel이 resource의 효율적 이용을 위해서 임의로 바꿀 수 있다)

­ real_time process는 super user만이 생성할 수 있다.

나. SCHED_RR (Round Robin)

­ time slice 존재. fixed priority(우선순위를 바꾸는 것이 가능하기는 하나 kernel이 임의로 바꾸지는 않음)


다. SCHED_FIFO

­ no time slice, fixed priority

☆ 아무튼 priority가 높은 process에게 CPU를 빼앗긴다 ☆


라. 그 외 특징

­ Linux에서는 blocked된 시간으로 priority를 조정하지만 Unix는 blocked된 이유로 priority를 조정한다.

­ 실시간 프로세스는 매우 높은 priority를 가지며 fixed priority를 가진다. (다단계 queue 스케줄링)

­ 커널 모드 프로세스는 커널에서 blocked되었다가 ready가 되면 resource를 차지하고 있는 것이므로 priority를 높여준다. (빨리 resource의 사용을 끝낼 수 있도록)

­ 사용자 모드 프로세스는 Blocked되었다가 돌아오면 그 동안 CPU를 사용하지 못했으므로더 높은 priority를 가지게 된다.


마. 예) clock interrupt 처리

­ clock interrupt는 slow interrupt이므로 두 단계로 나눠서 처리된다.

­ 그러므로 do_irg()함수를 수행하면 do_timer()함수와 timer_bh()함수를 호출하게 된다.

1) do_timer()함수

­ clock interrupt handler의 irq handler부분으로 interrupt를 disable시키고 동작하며 진짜 해야할 중요한 일들만을 처리

­ jiffy값을 증가시키고 하위처리기가 수행되도록 mask를 set하고 return한다.

2) timer_bh()함수

­ interrupt처리는 끝났지만 softirq 부분 처리가 남았으므로 bottom half 부분을 수행.

­ interrupt enable상태에서 동작.

­ 다른 interrupt나 system call보다는 우선순위가 낮으나, user process보다는 우선순위가 높다.



운영체제 구조

 


1. 커널

메모리에 항상 상주하며 process가 요청하는 일을 빠르게 처리해준다.

private같은 존재로 system call등의 member function을 통해 접근한다.


가. 커널의 기능

1) process(thread) management

2) processor management(scheduling)

3) memory management: process의 공간(text, data, stack, heap)할당 및 회수 (동적메모리도 관리한다)

4) device driver(interrupt handling): power fault > clock interrupt > I/O device

5) IPC: local 및 network와 distributed까지

6) file system

7) system 보안 및 보호


나. 커널의 종류

Monolithic kernel: 한 덩어리 커널. 커널안에서 할 일이 매우 많다.

1) 장점: 시스템 호출에 의한 서비스가 빠르다.

2) 단점: 운영체제 기능 변경 시(device driver 추가 등) 커널 컴파일이 필요. 이식성이 떨어짐.

Micro kernel: 커널에서 아주 필수적인 요소만 뽑아 크기를 줄여 만든 것

1) network, 다양한 IPC, file system, interrupt가 빠졌다. (매우 기본적인 것만 제공) 필요하다면 process로 만들어서 사용할 수 있다.

2) 장점: 다양하게 사용가능(확장성, 재구성 용이), 임베디드 시스템에 많이 사용, size가 작다, 메시지 전달만을 한다.

3) 단점: process가 많아지면 단지 function을 호출하는 monolithic커널과 달리 메시지 전달이 많아지므로 느리다.



2. 프로세스

현재 실행되고 있는 프로그램을 말한다.

각 프로세스는 상태와 context를 가진다.


가. 프로세스의 상태

1) Ready: CPU를 할당받기를 기다리고 있는 상태, 언제든 수행될 준비가 되어있다.

2) Blocked: request 혹은 원하는 event가 끝날 때까지 기다리고 있는 상태.

3) Running: CPU를 할당받아 현재 수행되고 있는 상태.

4) 상태전이: ready상태에 있던 프로세스가 scheduling을 받으면 cpu를 할당받아 수행하며 running상태로 바뀐다. running상태의 프로세스는 time slice를 모두 소진하면 ready상태로 다시 넘어가며, 수행 중에 I/O 요청이 들어오거나 어떤 event나 메시지를 기다려야 한다면 cpu를 넘기고 blocked상태로 간다. blocked상태에 있는 프로세스는 I/O작업이 끝나거나 기다리던 event가 발생하면 ready상태로 가서 다시 scheduling받기를 기다린다.


나. 프로세스 관리: 모든 프로세스는 PCB를 가지고 있다. (pid, uid, file info, priority, state, memory info, context 등을 저장하고 있음)


다. 프로세스 문맥(context)

1) user-level: text, data, stack영역

2) system-level: PC를 포함한 각종 register, resource사용정보, process관리정보

3) context switch

- CPU를 할당받거나 반납할 때, CPU가 다른 프로세스에게 할당되게 되는데, 이전에 수행시키던 프로세스의 context를 보존하고 새로 실행될 프로세스의 context를 활성화 시키는 것.

- 이전에 context_switch가 일어났던 곳에서 재개된다.

☆ Process는 kernel에서 죽고 kernel에서 살아난다. ☆


라. 프로세스 관리: ready queue와 block queue 안에서 관리된다.



3. 인터럽트 처리(interrupt handler)

가. Disk Interrupt Handler

1) 주요기능: 입출력이 완료된 프로세스를 ready상태로 만들어 ready queue로 옮기고 다음 입출력 요청을 수행하도록 시킨다.

2) handling과정: 이전에 수행 중이던 프로세스의 문맥을 저장하고 interrupt mask를 세팅한 후, I/O queue의 맨 첫 번째에 들어있는 block을 꺼내고, blocked queue에 들어있는 PCB를 가져와서 ready상태로 바꾸어주고 ready queue에 넣는다. 만약에 I/O queue에 요청이 남았다면 입출력을 시킨다.


나. Clock Interrupt Handler

1) 주요기능: 시간에 관련된 서비스 제공, 주기적인 system의 일, time slice 업데이트, system 시간 유지

2) handling과정: system time을 업데이트하고 timeout함수를 호출하고, 깨워줄 process가 있다면 그 process를 깨워준다. time slice가 다 되었다면 scheduling flag를 세팅해두고 후에 interrupt handling을 끝내고 빠져나올 때 flag를 검사해서 scheduling이 필요하다면 context_switch를 호출한다.


☆ Interrupt Handling 도중에는context_switch는 없다 ☆

→ kernel mode에서는 time slice에 의해 수행이 중단되지 않으며 스스로 cpu를 반납하기 전에는 context_switch가 없다. 그러나 real time process가 생길수도 있으므로 2.6버전부터 preemptible kernel이 생겼다.



출처: 운영체제개념 발췌