[yummyHitOS] 12 day (2017.07.23)

5 분 소요

오늘은 광복절이랍니다!! 사실 백수같은 야미는 오늘 공휴일인줄 모르고 사람들이 내일 쉰다기에 다들 여름휴가 내신쥴... 헿헤헤헿

오랜만에 연속글을 써보네여!! 야미녀석 초심으로 돌아오니?!

아녀... 눈치를 채신분이 계실지 모르겠지만... 디버깅에 지쳐섷ㅎㅎㅎㅎㅎ글 쓰는게 마음이 편해져서영ㅎㅎㅎ헤헿헿

뭔가 꼭 여러분께 한풀이해서 스트레스 풀기 위한 포스팅은 절대 네버 전혀 1도 아니예여!!!

참, 그리고 이번 포스팅의 마지막에 한 가지 정보를 알려드릴게여!! 이번에도 키보드를 하는데, 이 전 키보드 드라이버 소스파일에서 잘못된 점이 있었어여!! 오늘 그것도 함께 고쳐보아영 ㅎㅎㅎ(자꾸 이렇게 잘못된 것이 있으니 나중에는 어디서 문제인지 찾아보기가 넘나 어려운 것 ㅜㅠㅜ어우 어떡행~)



ㅋㅋㅋㅋ유명하신 분이 되었다는 레전드 짤...과 함께 오늘의 챕터를 진행해봅씨다!


챕터 14에 들어가자 마자 폴링 방식과 인터럽트 방식에 대해 간략히 설명이 되어있는데, 인터럽트는 지난 2일차 동안 해왔으니 이해하실지 모르겠지만... 폴링? 롤리폴리롤리롤리폴링? 뭐져그게?


Polling

폴링(Polling)이란 통신에서 사용되는 용어인데, 한 프로그램이나 장치에서 다른 프로그램이나 장치들이 어떤 상태에 있는지를 지속적으로 체크하는 전송제어 방식으로서, 대체로 그들이 아직도 접속되어 있는 지와 데이터 전송을 원하는지 등을 확인한다.


설명이 아주아주 자세하게 1+1 = 2인 이유는 액체나 기체가 아닌 고체에 한정했을 때 어떤 물체 2개를 합쳐도 1이 될 수 없다는 것과 같이 상상이 되고 와닿을정도로 쉽게 설명되어 진 곳이 없네여!! 한 가지 참고가 될 것 같은 pdf는 있어여!!


폴링, 인터럽트, DMA.pdf


저의 짧은 식견으로 이해한만큼 알려드리자면


폴링이란 통신에서 사용되는 용어인데, 주기가 정해져있는 방식인 것 같네요. 만약 우리가 키보드를 입력할 때, 혹은 마우스를 클릭하거나 움직일 때의 모든 행동을 받아들여야 하기 때문에 폴링방식으로 데이터 입출력을 처리한다면 주기가 저어어어어어엉말 짧아야 할 것이고(이렇게 글 쓰는 사람은 타자속도에 비례할 수 있겠지만, 게임하시는 분들은 크... 스타크래프트 프로게이머 선수분들만 봐도 APM이라는게 막 400이 넘고 그러시자나영 넘나 빠른것!) 사용자마다 개인적 차이가 있기 때문에 모든 사람을 맞춰주어야 할 것이며 엄청난 낭비가 도래하게 될 거예여. 물론 구현이 쉬우니 돈많고 귀찮으면 괜찮지않을까ㅇ..


이러한 이유 때문에 인터럽트 방식을 이용하는데, 인터럽트 방식의 장점은 무엇이냐면 키보드의 키를 한 개 Press, 혹은 마우스를 1nm라도 움직일 때 받아들이는 그 모든 인터럽트를 처리시키도록 만들면 낭비 없이 인터럽트가 들어올 때마다 처리를 시켜주어 각 사용자의 개인 차이를 균등하게 만들 수 있는 아주 혁씬적인 방법이져!! 대신 그 모든 인터럽트를 처리시키도록 만든다는게 말로는 쉽지ㅜㅠ 생각해보면 다 코딩해야하고 하나하나 처리를 해주어야 하니 구현이 어렵죠!


이런 차이를 가졌기 때문에 우리가! 폴링방식이 아닌! 인터럽트 방식을 사용하는 것입니다 여러분!!!(거의 대선출마하는쥴...)

저 설명 잘했나여? 아직도 미숙한가여? ㅜㅠㅜ열씸히 해보겠어영...


Stack

우리가 개발하는 아리따운 OS는 Queue를 버퍼로 사용한다고 해요. 12일차까지 따라오신 분들이라면.. 아무래도 Queue에 대한 자료구조는 아...시겠죠..? 저 이거 설명해야할까여? 아니아니 무시하는건 아니예요!! 그래도ㅜㅠ Stack, Queue, List, LinkedList 등의 자료구조는 기초가...라고 말하면서 열심히 자료구조와 큐에 대한 좋은 강의자료가 있나 찾아보고 온 츤데레 야미예여 ㅇㅅ,ㅇ(여기에 쉼표는 코파는 거라나 뭐라나...)

간단히 Queue에 대해 알고 가봅씨다.


여러분이 지금 여행을 가려고 한다고 가정해 볼게요. 배낭에 옷을 차곡차곡 탑을 쌓았어요. 그러면 맨 밑에 깔린 옷을 꺼내기 위해서는 맨 위에 있는 옷부터 차례대로 꺼내야 맨 밑의 옷을 꺼낼 수 있겠죠?!

이와 같이 '처음 넣은 것을 마지막에 꺼낼 수 있다'는 구조, First(처음)-In(넣은 것을)-Last(마지막에)-Out(꺼낼 수 있다) 라고 하여 앞 글자만 따서 FILO(혹은 '마지막에 넣은 것을 처음에 꺼내야 한다'는 구조와 일맥상통이므로 LIFO 라고도 해요!)구조라고 하는 이것은 다름아닌 Stack이예요!!


(야미님 Queue에 대해 알자면서 왜 스택이 튀어나오져? 맞아보실래여?) Stack을 먼저 알고 Queue를 알아가는게 좀 더 편하더라구여 저는!! 개인적 취향 취존취존 헿헤헿ㅎㅎ

혹씨 이런 질문이 들어오진 않겠져? '맨 아래 옷 제외 나머지 옷을 한 번에 들어서 꺼내면 되잖아욧!!!' 네... 이해를 좀 더 쉽게 하려고ㅜㅠ그런건데ㅜㅠㅜ 너무 그렇게 각박하게 비관적으로 생각하시면...ㅜㅠ 저의 예제를 잊으시고 아래의 그림으로 이해해주시면 돼여!!



이렇게 차곡차곡 삽입하고 삭제하는 구조가 Stack 구조이며, 삽입은 PUSH, 삭제는 POP이라고 해요!

네? PUSH, POP 어디서 많이 보셨다구여? 왜 그걸 이제 질문하ㅅ.. 그쵸!! 바로 어셈블리어 소스파일에서 보셨을 거예요! 더 설명하자면 우리는 OS개발이 아닌 어셈블리 공부를 하게 될 것이고, 컴퓨터 구조를 공부하게 될 것이며, 역사와 가상메모리까지 접근하여 리버싱에 입문하는 경지에 이르게 될 까 여기까지만 얘기할게요.

자 그럼 여기까지가 Stack 구조였으니 이제 정말 Queue 구조를 한 번 살펴보아요!!


Queue

이번에도 예를 들어 설명드릴게요. 어느 공원에 공중화장실(어릴 땐 공중에 떠있는 화장실도 아닌데 왜 공중인지 몰랐던 것..)이 단 하나밖에 없어서 사람들이 줄지어서 기다리고 있다고 상상해보세요. 가장 처음 공중화장실을 사용하는 사람 이후의 모든 사람들은 은행의 순번 / 놀이기구의 순서처럼 자신의 순서를 기다릴 수밖에 없겠죠!? 선착순대로 먼저 온 사람이 먼저 이용할 수 있는 것이죠!

이와 같이 Stack 구조와는 다르게 '먼저 도착한 것을 먼저 꺼낼 수 있다' 라는 구조가 바로 Queue 구조이며, 이를 First(먼저)-In(도착한 것을)-First(먼저)-Out(꺼낼 수 있다) 라고하여 FIFO구조(혹은 '마지막에 도착한 것이 마지막에 꺼내진다' 라는 의미로 LILO도 가능해요!)라고 합니다.


야미의 OS개발 포스팅은 막 자료구조도 나오고 해물삼선짬뽕같네여! 어차피 컴퓨터는 다~~ 이어져있고 다~~ 해야하기 때문에 한 가지만 한다는 것은 없는 것 같아요! 그럼 Queue 구조도 설명이 마음에 들지 않을 수 있으니 사진을 준비했을 야미라고 생각하시져?! 네! 전 절대 예상 밖의 사람이 아닙니다! 그럼 DJ Queue! Let's get it!



스택 보다는 조금 복잡하죠!? 스택은 가장 위(Top)를 포인터로 갖고 이 포인터가 가장 Bottom으로 오기 전까지 데이터가 존재한다고 생각하게 하면 그만인데, 큐는 새로운 데이터가 들어오면 Rear를 증가, 기존의 데이터가 빠지면 Front를 증가시키는 방법으로 Front와 Rear가 같아지면 데이터가 없다고 생각하게 하면 됩니다!

항상 하는 여담인데, Queue라고 구글에 검색 후 이미지에 들어가시면 ㅋㅋㅋㅋㅋ제가 예를 들어드린 것과 같은 현대의 사회와 큐를 비교한 사진만 잔뜩 나열되어 있네영!! 보여드릴게여 넘나 웃겨씀 ㅜㅠㅜ(그리고 저만 웃겼을듯...)



이러케 간접적인 맥뿍인증하기.jpg


이제 키보드 디바이스 드라이버 업그레이드 부분으로 넘어갈 수 있게되었네여!! 오랜만에 박수 쨖쨖~~

음... 그런데... 그 이후엔 이제 다 코드 설명이고, 제가 설명드릴게 없네요?




오늘의 포스팅은 여기서 끗..!? 뭔가 제대로 된 지식도 전달하지 못한 채 그냥 스택과 큐라는 자료구조에 대해 설명 쵸큼하고 이렇게 끝나버리니 허무맹랑~ 하기도 하네영 ㅜㅠㅜ 그럼 다들 이번 포스팅에서도 고생많ㅇ...


아~니죠~! 처음에 제가 말씀드린 코드의 오류 부분 몇가지를 알려드려야죠!! 먼저 출처를 밝히도록 할게요. 당연히 출처는 갓승훈 선생님의 Tistory주소인 http://kkamagui.tistory.com/781 랍니다! 오탈자를 적어주셨는데, 거의 대부분의 오탈자가 주석처리더라구요.(이것을 알아본 이유는 역시나 지금의 끝나지 않은 디버깅때문...ㅜㅠ)

제가 알려드리는 것 외에 몇 가지 코드 오류가 갓승훈 선생님의 까마구이 티스토리에 있는데, 제가 다 읽어보니 직접 책의 코드를 타이핑하셨을 때, 잘못된 부분을 스스로 인지하고 '아 책이 잘못됐네~' 라는 생각으로 알아서 고칠 수 있는 부분이 거의 전부였어요! 딱 2개 빼구요! 그 2개를 알려드리려고 합니당ㅎㅎㅎ


fixed code

1. Keyboard.c 와 Keyboard.h 파일에서 수정해야할 부분

BOOL kIsUseCombinedCode( BOOL bScanCode ) 함수 → BOOL kIsUseCombinedCode( BYTE bScanCode ) 로 매개변수의 자료형 타입을 BOOL → BYTE로 변경!!


2. Keyboard.c 소스파일에서 수정해야할 부분

BOOL kIsUseCombinedCode( BYTE bScanCode ) 함수 내의 지역변수인 bUseCombinedKey 선언 부분에 초기화도 시켜줘야 함.

BOOL bUseCombinedKey; → BOOL bUseCombinedKey = FALSE;


이렇게 두 가지만 고쳐주시면 됩니당ㅎㅎ!! 제 깃헙 소스파일을 보시면... 막 어디있는지 찾기도 힘들고 복잡하고 그러실거예여 ㅜㅠ 소스파일명부터 시작해서 함수명, 변수명 전부 제 취향대로 바꿔버려서...

오늘 포스팅은 오랜만에 짧디 짧고도 주저리 주저리가 별로 없어서 그런지 짤도 별로 안튀어나왔네여!? 이런 말을 하는 이유는 다들 아시겠져?! 이번 포스팅을 마치며 비도 추적추적 내리는 날이니 즐거운 짤을 투척하고 끝낼게여!! 다음 챕터에서 즐겁게 또 만나요~!!



설명충 야미는 이 재밌는 오렌지를 꼭 설명하고 가고 싶어서 다시 돌아왔어여...'ㅂ' 억누를 쑤 없는 야미의 설명본능!!

Annoying Orange 라는 Youtube 단편 코미디 시리즈가 있는데, 그 중 와사비편이 가장 웃기고 재밌었거든요!(객관적...이겠죠?! 전 정말 재밌었는데ㅜㅜㅠ제취향이 이상한게 아니길 바래여..)

아마 한... 7~8년 전부터 나왔을 거예여!! 라고 말하고 찾아보니 나무위키에서 알려주네요! 어노잉 오렌지의 역사와 특징에 대해서는 https://namu.wiki/w/어노잉오렌지%20 요기서 확인하시면 됩니다!! 심심하시면 보세여 정말 마약가튼 중독성있어여!! 막 웃는것도 와하하하항하앟아하하ㅏㅎㅇㅎ 스폰지밥같네여 웃는소리가 와하하하앟아하아하하핳하하... 넵 자제할게여 ㅜㅠㅜ 그럼 정말 다음 포스팅에서 뵈어여~!!


Check out the yummyhit’s website for more info on who am i. If you have questions, you can ask them on E-mail.

카테고리:

업데이트:

댓글남기기