[작성자:] snowall

  • 기말고사 진행중

    기말고사 6과목 중 1과목이 끝났다. 이름은 선형대수.

    1개 이상 틀리면 수학과 나온 친구에게 비웃음 당할 것이어서…

    다 맞췄다. -_-; 1개 틀릴뻔 했지만 3번 검산했더니 찾아낼 수 있었다.

    이제 나머지 5과목을 다 맞추는게 문제다.

  • 얘는 누구지?

    얼마 전에 글 하나를 썼었다.

    http://snowall.tistory.com/1643

    근데 그것때문에 유입 키워드가 왜곡되고 있다.

    키워드가 잘해봐야 50개를 넘어간적이 없었는데, 쟤는 거의 20%의 키워드 점유율을 보이고 있다. 누구지 -_-;

    얘기치 않은 낚시질을 막기 위해 이 글에는 별다른 키워드를 두지 않는다.

  • 운영체제

    진지하게 읽지 마세요.

    ——————————

    식당에서 주문을 하는 시스템을 관찰한 적이 있었다. 어차피 밥은 매일매일 먹으러 가니까 관찰하는데 일부러 신경써서 뭘 해야 하는건 없다.

    여기에 더불어 요즘 컴퓨터과학을 배우다 보니 운영체제가 사용자에게 서비스를 제공하는 방식에 대해서 공부를 하고 있다. 이것은 사실 식당의 발전 체계와 비슷한 것 같다.

    초기의 식당은 1명의 식당 주인이 주문 받고, 요리를 하고, 상을 차려서 내주고, 손님이 식사를 마치면 계산을 한다. 가령, 이런 것은 운영체제가 프로그램의 요청을 받아서 자원을 분배하고 회수하는 시스템과 닮아있다. 손님이 그다지 많지 않은 식당에서는 충분히 처리할 수 있다. 손님이 너무 오래 기다린다고 짜증내기 전에 식사를 내 올 수 있다.

    식당이 유명해 지게 되면 손님이 점점 많아지는데, 식당 주인은 가게를 확장해야 한다. 가게를 확장하게 되면 받을 수 있는 손님의 수가 많아지므로 더 많은 돈을 벌 수 있다. 그런데, 한번에 많은 수의 손님을 받게 되면 자리에서 대기하고 있는 손님이 많아지고, 결과적으로 손님의 평균 대기시간이 늘어나게 된다. 평균 대기시간이 늘어난다는 것은 맛이야 어떻든간에 서비스의 질적 하락을 나타내므로 좋지 않은 상황이다. 따라서 평균 대기시간을 줄이기 위한 방법을 생각해 봐야 한다.

    식당 주인이 쓰는 방법은 여러가지가 있다.

    식당 주인이 손님의 요청을 받고, 주문서를 갖다가 주문서 큐(Queue)에 올려두면 요리사가 순서대로 처리하는 방법이 있다. 식당 주인이 손님의 요청을 받는 사이에도 요리사는 요리를 할 수 있고, 주문서 큐를 잠깐만 참고하면 되기 때문에 이 방법은 요리사를 방해하지 않는다. 이런걸 DMA(Direct Memory Access)방법이라고 한다.

    요리사가 요리를 하기 전에 냉장고에서 미리 요리 재료를 꺼내서 도마 위에 올려둘 수가 있는데, 이걸 캐싱(Cacheing)이라고 부른다. 냉장고에서 꺼내 오는 것보다 도마 위에서 바로 손질하는 것이 훨씬 빠르기 때문에 잘만 하면 대기시간을 확 줄일 수 있다. 캐싱을 잘 하려면 어떤 요리가 주문될 것인가 예측하는 것이 대단히 중요하다. 예측의 정확도가 높을수록 대기시간이 줄어든다.

    한단계 더 나아가서, 납품받은 식재료를 미리 냉장고에 채워넣는 것은 버퍼링이라고 한다. 버퍼링이 없다면, 가령 간장 게장을 시킨 손님은 “아니, 요리사가 게잡으러 동해로 떠났어?”라고 생각하게 될 것이다.

    식사가 나오기 전에 밑반찬을 미리 내와서, “뭔가 진행중”이라는 생각을 갖도록 하여 손님을 붙잡아 두는 방법이 있다. 만약, 여기에 밑반찬을 미리 내오는 서빙 알바를 두고 식사를 서빙하는 알바를 둔다면 이것은 2단계 파이프라이닝이 되는 것이다. 물론 여기에서도 병목현상은 일어날 수 있는데, 알바가 1명이라면 손님이 몰려왔을 때 밑반찬 세팅에 대한 대기시간도 늦어질 수가 있다.

    처리하는 단계를 좀 더 세분화 해서, 물수건과 물컵과 식기를 세팅하는 알바를 두고, 주문을 받는 알바를 두고, 밑반찬을 내오는 알바를 두고, 식사를 서빙하는 알바를 두고, 계산대에서 식대 정산만 하는 알바를 둔다면 5단계 파이프라이닝이 된다.

    3, 4단계 파이프라이닝은 어떻게 하면 되는지 생각해 보자.

    요리사를 여러명 고용해서 한번에 여러개의 요리를 만들도록 하는 것도 방법이 될 수 있다. 이것은 요즘 유행하고 있는 다중 CPU 병렬 처리가 된다. 이 경우에는 어느 요리사에게 어떤 주문을 넣어주느냐를 분배하는 방법을 잘 고려해야 한다. MPI나 openMP같은 라이브러리를 알려주면 좋겠지만, 식품 공학과 컴퓨터 공학 사이에는 언어의 장벽이 있다. 아무튼 식당 주인은 주문을 받아서 잘 넣어주면 된다.

    요리사를 여러명 고용하다 보면 주방이 좁아지는 경우를 피할 수 없는데, 아예 다른 식당과 연합하여 한쪽으로 주문이 몰릴 때 다른 식당에서 요리를 해서 갖다 주는 방식을 생각해 볼 수 있다. 이 경우, 식당과 식당 사이에서 주문을 전달하고 요리를 받아오는 속도가 관건이 된다. 이것은 서버 다중화 기술에 해당한다.

    아예 손님이 주문 받는 창구를 단일화 해버리고, 주문은 한곳에서 받고 식사는 각각 적당한 곳에 배정해서 요리를 내오도록 하는 곳도 있다. 백화점 푸드코트에서 쓰는 방식인데, 이런 것을 클라우드 컴퓨팅이라고 한다. 좀 더 확장된 의미의 클라우드 컴퓨팅에서는 아무데서나 주문해도 적당한 곳에서 요리가 나오는 것이 가능하다. 요즘 각광받고 있다.

    한명의 요리사를 쓰더라도, 여러개의 요리를 동시에 처리하도록 할 수도 있는데, 가령 어떤 요리가 10분동안 물을 끓여야 하는 과정이 필요하다면 그 사이에 다른 요리의 다른 과정을 수행할 수 있는 것이다. 이 경우, 요리사의 지능이 높아야 한다는 제약조건이 필요하지만 어쨌든 평균 대기시간을 줄이는데 한몫 할 수 있다. 이것은 시분할 다중처리에 해당한다. 만약 한명의 요리사가 가스렌지를 쓰면서 전자렌지를 돌리고 도마에 양파를 다지면서 오븐에 닭을 굽고 있다면 이것은 하이퍼스레딩이 된다. 하이퍼스레딩이란 하나의 CPU를 두개 이상의 CPU처럼 보이게 하는 기술이다. 근데 손님이 적을 때는 하이퍼스레딩을 안하는 것이 더 빠르게 처리된다.

    손님 중에 변태끼가 있는 사람이 있어서 중국집에 가서 꽃등심 스테이크를 주문하는 사람이 있다면, 일반적으로 그런 손님은 욕먹으면서 내?기게 된다. 하지만 기왕에 온 손님을 내칠 수는 없다며 시장 확대를 위해 몸부림 치는 식당 주인이라면 에뮬레이션과 가상화를 고려하게 된다. 중국집 요리사보고 꽃등심 스테이크를 배워서 내놓으라고 한다. 이런 경우에는 중국집 요리사가 꽃등심 스테이크 만드는 법을 요리책을 보면서 해야 하기 때문에 주문이 느리게 처리될 것이다. 이것을 에뮬레이션이라고 부른다. 돈을 많이 받는 유명 중국집 요리사들은 아예 양식 요리사를 고용할 수도 있는데, 이것은 가상화가 된다. 물론, 진짜 변태스런 손님은 중국집에 가서 양식 요리사보고 탕수육을 만들어 오라고 할 수도 있다. 이 경우, 중국집 식당 주인이 융통성을 발휘해서 양식 요리사 대신에 원래 데리고 있던 중국음식 요리사에게 탕수육을 만들어서 양식 요리사보고 갖다 주라고 할 수도 있는데, 서비스 품질도 좋고 더 빨리 처리된다. 이것을 하드웨어 수준에서 지원하는 가상화라고 한다.

    손님이 주문을 한 순서대로 요리를 내가는 방법을 FIFO(First in First out)라고 한다. 이것은 Queue를 써서 주문을 처리하는데, 대부분의 소규모 식당에서 사용한다. 하지만 어떤 손님이 시간이 엄청 걸리는 요리를 주문했는데, 요리사가 한명 뿐이라면 다른 손님들의 평균 대기시간이 너무 길어질 것이다. 그래서 식당 주인들은 잔머리를 굴려서 주문에 우선순위를 주고 평균적으로 대기시간을 줄여서 몇명은 화를 내더라도 전체적으로는 만족스러운 주문 처리를 하는 방법을 개발해 냈다. 우선 한가지 알아두어야 하는 것은, 요리사한테 요리를 하다가 말고 다른 요리부터 먼저 하라고 시키는 방법을 선점형이라고 부르고, 하나 시작했으면 끝까지 마친 다음에 다른 요리를 시키는 방법을 비선점형이라고 한다.

    SJF(Shortest Job First)라는 방법이 있다. 이건 비선점형으로, 일단 시작한 요리는 완성한다. 그리고 나서 그 다음에 들어온 주문 중에, 가장 요리 시간이 짧을 것 같은 주문을 먼저 처리한다. 이 방법의 단점은, 요리시간이 짧은 주문이 계속 들어오면 상대적으로 시간이 길게 걸리는 주문은 무한정 기다릴 수 있다는 것이다. 그리고 요리시간에 대한 요리사의 추측이 틀리면 GG

    SRT(Shortest Remaining Time)방법은 SJF를 조금 바꾼 선점형 방법이다. 일단 요리를 시작하는데, 만약 지금 하고 있는 요리를 완성하는데 걸리는 시간보다 더 빨리 완성할 수 있는 요리의 주문이 들어오면 그걸 먼저 처리한다. 이건 SJF방법보다 요리사가 좀 더 부담스러운데, 계속해서 만드는 요리를 바꿔야 할 수 있기 때문에 머리털 쥐어 뜯게 만들 수 있다는 점이다.

    RR(Round Robin) 방법은 완전 잔머리 굴린 선점형 방법인데, 요리사가 일정 시간마다 계속해서 처리중인 요리를 바꾼다. 일정 시간이 지나면 순서대로 요리를 바꿔가면서 한다. 문제는, 재수없으면 모든 손님이 오래 기다릴 수 있다는 점이다. 그리고 마찬가지로 요리사가 머리가 좋아야 한다는 제약조건이 발생한다.

    그외에도 몇가지 방법이 더 있지만 생략한다.

    손님들의 주문이 몰려오다 보면 주방이 마비되는 일도 가끔 발생한다. 탕수육을 만들려면 가스렌지 위에 솥을 놓고 기름을 부어서 고기를 튀겨야 하는데, 밥을 하려면 가스렌지 위에 솥을 놓고 물을 끓여서 쌀을 익혀야 한다. 요리사 여러명이 하나의 솥을 놓고 쓰는데, 어떤 요리사가 솥에 기름을 넣고 가스렌지에서 기름을 데우면서 고기를 썰고 있는 사이에, 다른 요리사가 밥을 하겠다고 솥에 있는 기름을 버리고 물을 끓였다. 앞의 요리사가 고기를 썰어서 솥에 넣었더니 탕수육이 아니라 그냥 수육이 되어버렸다. 두 요리사가 싸우게 되고 손님은 무한정 기다리게 되는데, 이런 상황을 교착상태(Deadlock)라고 부른다. 식당 주인으로서는 제발 피하고 싶은 사태이다. 심정적으로는 눈물이 날 것이다.

    교착상태는 요리사가 여러명일 뿐만 아니라, 요리사가 한명이더라도 손님의 주문이 이상한 경우에 발생할 수 있다. 손님이 낙지 볶음과 돌솥 비빔밥을 주문했다고 하자. 돌솥 비빔밥을 만들려면 밥을 돌솥에 담고 야채와 고기를 넣고 고추장을 넣으면 된다. 근데, 요리사가 야채와 고기를 돌솥에 담아놓고 전기밥솥이 밥을 하는 사이에 요리사가 낙지를 볶았는데 고추장을 다 써 버렸다. 문제는 돌솥에 야채를 다 써버려서 낙지볶음을 완성시킬 수 없다는 것. 게다가 고추장을 다 써버렸으니 돌솥 비빔밥이라고 제대로 만들 수도 없다. 물론 이럴 때 현실의 요리사라면 낙지덮밥을 내놓는 비장의 수를 쓸 수 있겠지만 어쨌거나 주문대로 요리가 나오지 않았으니 고객 만족도는 떨어질 수밖에 없다.

    교착상태를 막으려면, 저런식으로 사용량이 제한된 자원은 계속 보충을 해줘야 한다. 또한, 만약 돌솥 비빔밥의 주문이 들어왔다면 돌솥 비빔밥을 만드는데 필요한 자원을 모두 모아놓고 다른데 쓰지 않는 전략이 필요하다. 이런식으로 일을 했다면 위의 요리사는 최소한 돌솥 비빔밥은 내갈 수 있었을 것이다.

  • 프로게이머

    생각해보니, 프로게이머 리그가 있는 게임이 대부분 전쟁/싸움 게임이다.

    대표적인 게임인 스타크래프트, 워크래프트3이 있다. 그리고 스페셜포스, 서든어택이 있다. 던전앤 파이터도 판타지 계열이지만 싸움의 요소가 있다. 철권이나 스트리트파이터도 싸우고 있는 것이고.

    카트라이더, 피파온라인 정도가 게임 리그가 있는 것들 중에서 전쟁/싸움의 요소가 아닌 것으로 보인다.

    전쟁이 살인이라는 요소만 없다면 최고의 스포츠라는 것인가?

  • 생활일기

    이사를 했다.

    세탁기를 중고로 질렀다.

    이사하려고 이삿짐을 싸다 보니 옷에 먼지가 많이 묻어서 전부 새로 세탁하려고 작정하고

    세탁기에 다 집어넣었다.

    그리고 처음으로 켰는데.

    급수를 계속 하는데 배수구에서 물이 계속 빠져나온다. 물 높이는 최소로 설정되어 있었다.

    아무리 생각해도 수위 센서가 고장난 것 같다.

    망했다.

    A/S 해달라고 사람 부를 시간도 없는데…

    실험이 시작되는 바람에 점심때도 시간이 없고, 저녁때도 8시 넘어서 일이 끝난다. 이번주랑 다음주는 시험기간이다. 뿐만 아니라 이번주 토요일날 친구 아들내미 돌잔치도 있다.

    연구소에서 건강검진을 하라고 해서 24일에 예약했는데 그거 일찍 끝나면 A/S기사를 불러야 할 것 같다.

    세줄요약

    1. 앞으로 2주간 옷을 못 갈아입을 듯.

    2. 빨래는 2주간 불린 후에 세탁될 것 같다.

    3. ……..

    ————

    추가

    판매처에 전화를 해봤더니 세탁기 뒷면의 철판을 뜯고 안의 고무호스를 연결해주면 정상작동할 것이라고 했다. 신나서 철판을 뜯고 고무호스를 찾아서 연결했다. 정상작동한다. 아싸…가 아니라!

    정상작동하는거 확인하고 팔든가…-_-; 왜 고객한테 AS를 맡기는데…

    그건 그렇고, 안에 “펀치”도 있고 “스크류”도 3개 붙은 “통돌이” 세탁기인데 먼지가 안빠진다…

    세탁물에 원래 묻어있던 먼지인지, 빨래중에서 한놈이 갖고 있던 먼지인데 골고루 묻은건지 구별이 안간다. 세탁기의 성능이 심히 의심되는 상황이지만, 다 마르면 탈탈 털어서 입는거지 뭐. 아님 한번 더 빨아주든가.

  • 부러운 직장

    유명 가수 A군이 성매수 혐의로 경찰 조사를 받아야 한다는 기사를 읽다가…


    http://www.cbs.co.kr/nocut/show.asp?idx=1335888

    서울 모 병원 공익요원으로 근무하고 있는 A씨는 7일부터 이날까지 사흘간 ‘개인사유’로 연가를 낸 상태며, 근무일수를 감안해보면 이날 이후 휴가를 신청할 수 있는 휴가일수가 30일 더 남아 있다고 병원측은 밝혔다.

    유명 가수 A씨가 어떤 놈인지는 전혀 궁금하지 않지만, 저 모 병원이 어디인지는 정말 궁금하다.

    공익인데 사흘간 개인사유로 연가를 내고 휴가일수가 30일이나 더 남아있다면, 연간 휴가 신청 가능일이 33일이 된다는 뜻이다.

    신의 직장 아닌가??

    우리나라에 1년에 무려 33일의 휴가를 쓸 수 있는, 그것도 휴가철도 아닌데 3일을 붙여서 개인사유로 쓸 수 있는 곳이라니.

    비로 지금 다니는 직장이 두번째 직장이긴 하지만, 내 주변에서 휴가를 저렇게 마음껏 쓰는 사람은 한번도 못봤다. 휴가를 쓰기도 어렵지만, 휴가를 쓸 때도 업무 공백이 생기지 않도록 여기저기 조율해 놔야 하고 남들 일할때 쉰다고 눈치도 봐야 하며 휴가를 가서도 혹시 전화가 올 수도 있기 때문에 전화기를 켜놓고 있어야 한다. 사장 정도 되어야 마음껏 쓰지 않나?

    그나마 난 비정규직이라 1개월 만근하면 1일 생기는 월차로 1년에 12일밖에 못쓴다. 다 쓸 수나 있으면 다행이고, 못썼을 때 수당으로 받을 수 있으면 행복한 거다.

    나도 저런 좋은 직장에서 일하고 싶다. 부럽다. A군.

  • 실험일지

    실험 세팅이 다시 시작되었다.

    = 사무직 종료, 육체 노가다 시작.

  • 이론물리학의 즐거움

    서울로 올라오는 버스 안에서, 3년전에 대학원 다닐 때 이해하지 못했던 Quark의 Mixing이 어떤 의미인지 이해되었다. 아울러 Lepton의 Mixing도 어느정도 좀 더 구체적으로 이해하게 되었다.

    실험이었다면 실험 결과를 분석하기 위해서 이론을 도입해야겠지만, 아무튼 실험을 진행해야 하고 실험 진행은 버스 안에서는 할 수가 없다.

    아무래도 난 입자물리학 이론을 해야 할 것 같다. 밥은 좀 굶더라도. 심장이 두근거리는걸.

    음…그렇지만 내가 재능과 노력이 좀 부족하여 미래의 내 배우자와 애들이 굶을지도 모른다고 생각하니 긴장된다.

  • 운명의 조추첨

    스포츠 뉴스를 보다가 이제 2010년 월드컵의 조추첨이 있을 거라는 소식을 들었다.

    운명의 조추첨이랜다.

    아…이런 비겁한.

    조추첨 정도를 “운명적이다”라고 말하는 건 참 비겁하다. 조추첨에서 조가 결정되는 것은 순전히 확률에 따르는 것이고, 결국은 운에 맞춰서 결정되는 법이다. 강팀들과 편성되면 16강에 진출할 가능성이 낮아지는 것이고 약팀과 편성되면 본선 진출할 가능성이 높아질 것이다. 여기서 사람들이 바라는 것은 약팀과 편성되서 편하게 본선에 진출하기를 바라는 것이다.

    그런데 이것은 비겁한 것 같다. 물론, 좋은 성적을 거두기를 바라며 매일매일 경기력 향상을 위해 훈련하는 감독과 선수, 스탭진을 나무랄 일은 아니다. 약팀과 만나서 16강, 8강 등 좋은 성적을 거두는 것이 비겁한 일은 아니다. 하지만 처음부터 약팀을 만나기를 바라고, 실력이 성장하지는 않더라도 성적이 좋기를 바라는건 비겁하다. 차라리 탈락하더라도, 강팀이든 약팀이든 좋으니 대한민국 국가대표팀이 가진 실력을 아쉬움 없이 발휘할 수 있다면 좋겠다.



    [각주:

    1

    ]


    브라질이나 독일같은 팀을 보면, 그들은 어느 조에 편성되는가는 신경쓰지 않는다. 실제로 굉장한 실력을 가진 팀들이기도 하지만, 자신들이 갖고 있는 실력에 그만큼 자신이 있기 때문에 어느 팀을 만나든 열심히 뛸 것이고 그만큼의 결과를 얻으리라는 믿음이 있다. 우리나라도 그런 태도는 본받아야 한다. 월드컵 32년 연속 본선 진출인가, 뭐 그런걸 쾌거라고 자랑하는 사람들이 있다. 브라질이나 독일은 우승을 몇번이나 했는지 모르겠다. 오히려 그렇게 운에 맡기고, 약팀과 한 조가 되면서라도 본선 진출하기를 바라는 사람들이 우리나라의 실력을 깎아먹고 있다는 생각이 든다.

    축구 경기의 본질은 선수들이 열심히 뛰었다는 것이고, 거기서 나타나는 승부는 그렇게 열심히 뛴 결과에 불과하다. 선의의 경쟁을 하는 운동 선수들에게 최대의 모욕은 “넌 나보다 못해”가 아니라 “나 대충 뛰었는데”가 될 것이다. 월드컵에서 약팀과 한조가 되면 대한민국 축구 국가대표팀은 대충 뛰고서도 16강 진출이 가능할까? 그것이 가능한가 여부는 둘째치고, 그것은 상대팀을 무시하는 일이다. 차라리 독일같은 강팀한테 대충 뛰고서 져주면 독일이 황당해 하기는 하겠지만.

    방송으로 중계되는 스포츠의 본질은 결국 대리만족이다. 우리편 선수들이 승리를 하면 나도 승리한 것 같이 기쁘고, 패배하면 나도 패배한 것 처럼 슬프다. 하지만 대리만족은 대리만족일 뿐 그것이 나의 진정한 만족은 되지 않는다. 국가대표팀의 선전을 기원하는 건 기원하는 것으로 끝내고, 그들이 열심히 뛰었으면 결과가 어떻든 충분히 재미있게 즐겨볼 수 있지 않을까. 축구에서 졌어도, 당신이 당신 자신의 현실에서 승리한다면 그것으로 우리나라가 발전할 수 있지 않을까?

    1. 물론 이 경우에도 탈락하면 “대한민국 국가대표팀이 가진 실력을 모두 보여주지 못해서 아쉬운…”이라고 말하는 사람들이 꼭 있겠지만. 사실 이 얘기는 국가대표팀 소속 감독, 선수 등 외에는 하면 안되는 말일 것이다. 다른 사람들이, 그들이 정말 얼마나 열심히 뛰었는지 얼마나 아쉬워하는지 어떻게 짐작이라도 할까?

      [본문으로]