티스토리 뷰

Study/OS

[OS] Mint64OS 11절 Keyboard Device Driver

생각많은 소심남 2013. 1. 22. 20:22

이틀동안 삽질하다가 드디어 키보드 입력까지 왔다. Mint OS가 키보드 입력을 받는 방식은 일단은 기다리고 있다가 스캔코드가 들어오는 대로 뿌려주는 방식이다. 이렇게 받아오는 값이 스캔 코드, 흔히 말하는 ASCII 코드가 되며, 커널로 전달될 때도 우리가 입력하는 값에 대한 스캔 코드가 넘어오기 때문에 그걸로 출력을 하기 위해서는 따로 테이블이 존재해야 한다. 그래서 키보드 상에 있는 자판 중 88개의 경우에 대해서 테이블을 작성한 후에 그 결과를 보는 중이다.



장 보면 알겠지만 bochs 창 아래에는 각 Lock 자판도 표현이 되어 있으며, 거기에 대한 LED도 가상으로나마 구현된다. 지금 위의 이미지는 NumLock이 켜져 있는 상태이다. 나머지도 각각에 대한 Lock키가 활성화 되어 있는 상태이다.




다들 알겠지만 컴퓨터가 막 켜진 상태에서도 del키를 누르면 BIOS설정이나 UEFI로 넘어간다. 이에서도 알 수 있다시피 애초에 컴퓨터가 부팅되면서 키보드는 쓸 수 있다. 뭐 그건 그렇고.. 일정 시간동안 버퍼에 입력이 있는지 없는지를 감시하다가 있으면 바로 출력으로 나타내는 형식을 취한다. 하지만 지금 구현하고 있는 멀티 코어기반의 운영체제고 그러기 위해서는  멀티테스킹이 강조되는데 비해서 지금과 같은 방식은 감시자를 따로 놔두는 구조이기 때문에 무척 비효율적이다.

  그런 걸 해결하기 위한 방법이 바로 인터럽트 방식이고, 그냥 무작정 기다리는 방식과는 다르게 입력 자체가 깨우는 도구가 되는 것이다. 그러면 입력이 들어오는 순간에만 감시를 하는 것이고 그 나머지 순간에는 다른 동작에 관여할 수 있기 때문에 조금 더 효율적이겠다.물론 이 부분은 다음에 구현하려고 한다. 밑의 영상은 X11 Forwarding을 통해 windows에서 bochs에 입력을 주는 것을 나타내고 있다.


댓글