Posted by 미스란디르
Tue, 20 May 2008 11:38:00 GMT
pintos는 스탠포드에서 제공하는 교육용 OS 뼈대이다.
nachos가 c++이나 java로 된것과 달리, pintos는 c로 과제를 작성하게 되어 있다.
게다가 빌드시스템이 상당히 잘 만들어져 있고, 테스트도 꽤 편하게 수행할 수 있는 것도 장점이다.
우리나라에서도 서울대나 한양대, 카이스트 등에서 수업용으로 쓴다고 하는데, 나도 요번 수업에서 pintos 숙제를 하게 되었다.
몇일동안 작업을 한 끝에 제출할 때는 multi-oom을 제외한 모든 테스트를 통과 했고,
제출후 장난쳐보다가 드디어 multi-oom을 통과 하게 되서 감개 무량한 나머지
여기 자랑을 한다.
스샷.

구현하고 나니 제대로 못한 것들이 좀 있다.
- tid랑 pid를 구분을 안한 것.
- process.c 에서 다뤄야 할 것들을 thread.c 에서 다뤄버린것.
- thread구조체 이외에 process 구조체를 따로 만들지 않고 작성한 것.
- "부모가 죽었을 때 종료를 기다리던 좀비 자식들을 모두 정리해주는 것" 을 빼먹은 것.
- stdin에서 read할 때 한글자씩만 반환하게 한 것 (큐에 쌓여 있으면 한번에 줘도 되는 것을..)
아쉬운 것들이 많지만, 테스트를 전부 통과했으니 그런 것 다 필요없다. 후후후 (...)
사실 리눅스 소스를 보거나, 여기저기서 어설프게 주워들은 것들이 좀 있어서 OS의 어떤 부분이 *대충* 어떻게 돌아가는지 어렴풋하게 알고는 있었는데,
실제로 구현을 해보니 어떤 식으로 돌아가는지 조금 확실해 졌다. 완전히 확실해 지지 않은 것은, pintos가 장난감 OS이기 때문인데, 예를 들자면 숙제를 하면서
copyfromuser의 리눅스 구현을 참조하려고 했더니, 너무 길어서 참고하기가 난감할 정도였다.
뭐 아무튼. 이런 재미있는 장난감을 만든 스탠포드의 조교들에게 땡큐를 보낸다.
6 comments | no trackbacks
Posted by 미스란디르
Tue, 22 Apr 2008 00:53:00 GMT
얼마전에 인기리에 방영된 애니메이션 늑대와 향신료에는 麦(mugi: 보리)가 소재로 자주 등장한다.
처음 등장한 마을도 보리의 산지로 유명한 곳이다. 애니메이션에선 원작 소설 2권으로 스토리가 끝나는데,
그 이후에도 보리 얘기가 자주 등장한다. 그런데.. 라이 麦도 등장하고, 만들어서 빵을 만들어서 먹는 얘기가 나오면서 약간 어색해지기 시작한다.
보리로 빵을 만들어 먹어?
일본에서 밀은 小麦(komugi)라고 쓴다. 작은 보리인지 뭔지, 아무튼 麦라는 글자가 들어가는걸로 봐서 이 부류인가보다. (감자가 고구마나 토란이 전부 imo류인 것 처럼)
그리고 늑대와 향신료의 배경은 아마도 중세 유럽인 것 같다. 왕이나 은화, 금화, 영주, 포교전쟁 등을 봐서는.
그렇다면 여기서 생각해 볼 점이, 과연 麦를 보리라고 번역하는 것이 맞을까. 우리나라에서 보리라면 맥주를 만드는 재료, 보리차 혹은 보리밥정도가 되겠다.
그리고 빵을 만들어 먹는것이 밀, 호밀 등이다. 호밀은 raimugi라고 하더라. 얘도 麦다.
그리고 얘네들의 통칭은 아무래도 보리보단 밀이 맞지 않을까. 비록 밀가루(小麦粉)빵이 비싼 사치품이라서 밀가루는 특별취급 당하는 시대라고는 하지만,
麦라고 등장하는 말의 대부분이 보리를 가리키기 보다는 밀종류의 대명사처럼 쓰인다는 것을 볼때
적어도 이 애니메이션/소설에서는 麦를 밀이라고 번역하는 것이 맞지 않을까.
소설판에서도 여전히 보리라고 나온다는 얘기를 듣고 잠시 심심해서 생각해 본 것.
PS. 혹시나 해서 보리빵을 검색해 봤는데, 이런 글을 발견 했다.
17세기가 되어 호밀빵 대신에 보리빵을 먹었는데, 밀빵은 사치품이었다.
버터도 보급되었으며, 농민의 일상 식사로서 우유와 돼지고기의 양도 늘었다.
부자들은 겨울에는 염장 또는 훈제한 고기를 먹었다. 서민층의 술인 진이 보급되고,
프랑스에서는 1661년에 샴페인이 제조되었으며, 저녁식사 후에 디저트를 내놓는 일이
이 시대에 비롯되었다.
18세기가 되면 질이 좋은 빵과 함께 미국에서 전래된 감자를 일상식사로서 먹게 되었다.
호로가 감자를 먹는 장면이 나오니까 그 이후겠다. (설마 배경이 미국은 아니겠지)
그렇다고 해도 보리가 밀류의 대명사로 번역되는건 역시 어색하다는 주장에는 변함이 없다.
no comments | no trackbacks
Posted by 미스란디르
Tue, 08 Apr 2008 02:23:00 GMT
왜 스타일이 이상해졌는지 알고 잎으면 다음 사이트 - CSS 벗은날을 방문해보라.
no comments | no trackbacks
Posted by 미스란디르
Sat, 29 Mar 2008 15:20:00 GMT
구글 통계를 살펴 보는데, 이상하게 soojung쪽 페이지 하나가 방문 1위를 차지하고 있다. 왜 그런가 봤더니만, 광고가 너무 많이 달려서 구글 검색 상위를 차지하고 있었나보다.
괜히 신경질도 나고, 술김에 등등의 이유로 스팸을 싹 지워 버렸다. ssh로 서버쉘에서 grep, find, rm등을 동원해서 했는데 생각보다 오래 걸리지 않았다. 지금 생각하는 거지만 저 텍스트 기반 저장소는 정말 괜찮은 것 같다. DB를 안써서 편하고, 원하는 사람은 파일들을 직접 건드리면 되고.
검색도 원하면 lucene 따위의 검색엔진을 붙였으면 좋았을 것 같은데. 귀차니즘으로 내가 공헌한 코드는 별로 없지만, 그래도 아쉬움이 남긴 한다.
뭐 그건 어쨌든 그렇고.
옛날에 쓴 글들을 살펴보니 재미있는 것들도 많고, 지금 봐도 잘 쓴 글들도 꽤 있다.
물론 지금 보니 저걸 왜 썼나 싶은 것들도 있고.
subversion 사용시 알아둘점 같은건 경험을 살려서 쓴 나름 괜찮은 글이다.
JLPT 시험본 얘기를 보니 잘 생각도 안나는데 왠지 아련해지기도 하고.
웃음:울음 = 64:36같은건 재밌다.
이렇게 둘러보고 있으니 좀 더 열심히 써볼 걸 하는 생각도 들고.
요새 블로깅이 영 뜸했는데, 나중에 볼 생각을 하고 다시 좀 써볼까 한다.
no comments | no trackbacks
Posted by 미스란디르
Sat, 29 Mar 2008 00:08:00 GMT
C를 배운지 얼마 안된 사람이 다음과 같은 질문을 했다고 쳐보자.
"값을 반환 했는데 먼가 잘 안돼요."
그래서 소스를 살펴본다.
int sum_and_multiple(int a, int b)
{
int sum = a + b;
int mul = a * b;
return sum, mul;
}
약간 특이하다. 저건 컴파일할때 에러가 아닌데, (적어도 GCC에선) 그렇다고 값을 두개를 반환하는가 하면 그것도 아니다.
C의 함수 구현은 저런 반환값을 허용하지 않는다. 저건 잘못됐다고 살짝 야단을 치면서 혹은 친절하게
지난번에 가르쳐준 call-by-reference를 복습시켜준다.
정답은 물론 다들 아시는 것 처럼 이렇다.
void sum_and_multiple(int a, int b, int *sum, int *mul)
{
*sum = a + b;
*mul = a * b;
}
정말 그걸로 된걸까?
요즘엔 이런 생각이 든다. 이러한 설명 과정에 의해서 자연스러운 사고방식이 또 하나 없어져가는게 아닐까, 라고. 함수가 값을 반환한다고 배웠다면
값을 꼭 하나가 아니라 여러개 반환하는 건 안될까? 라고 생각하는 것은 너무나도 당연한 생각이다.
조금 다르게 struct 형을 반환하거나, struct를 동적할당해서 그 포인터를 반환하는 방법이 있다.
하고싶은 것에 비해 들이는 노력이 너무 많다.
이러한 동작들이 어째서 안되는지를 설명하기 위해서는 C의 구현, 컴퓨터의 동작방식
레지스터와 스택등을 설명하지 않으면 안된다. (이제와서 생각해보건데, 두개가 안될
이유가 별로 없어 보인다. x86이라면 ax나 eax대신 스택으로 반환값을
처리한다거나 하면 되지 않겠는가?)
하지만 그건 어찌보면 좀 가혹한 얘기이고 흥미를 잃을 수도 있다.
여기서 루비나 파이썬 혹은 LISP같은 프로그래밍 언어를 잠깐만 소개해주면 어떨까?
'이건 무조건 안된다.' 'call-by-reference로 하렴' 대신,
가능 한 경우도 있다고 알려준다.
def sum_and_multiple(a, b)
sum = a + b
mul = a * b
return sum, mul
혹은
def sum_and_multiple(a, b)
sum = a + b
mul = a * b
sum, mul
end
혹은
(defun sum_and_multiple (a b) (LIST (+ a b) (* a b)))
딴 얘기지만 python이랑 루비는 지향하는 바가 다르면서도 키워드가 비슷해서 그런지 참 비슷하게 생겼다.
루비에서도 return을 쓸 수 있으니 return sum, mul 하면 end빼고 똑같지 않은가!
이제 처음 프로그래밍을 배우기 시작해서 C를 익히는 사람에게 다른걸 보여줘봐야 무슨 소용이 있나 싶기도 하다.
하지만 무조건 프로그래밍 언어에 자신을 끼워 맞추기 보다는 또 다른 세계가 있다는 것을 알려주는 것이 좀 더
올바른 교습방법이 아닐까 하는 생각이 든다. 물론 가르치는 사람이 몰라서 안가르쳐 주는 경우가 더 많겠지만.
Posted in 프로그래밍 | Tags 뜬금없이 | 2 comments | no trackbacks