[yummyHitOS] 14 day (2017.07.29)
야미님 왜 7월 23일까지 열씸히 개발하시더니 이번에 6일이나 지나셨나여?! 그동안 슬럼프셨나여?! 한 말씀 해주시져!!
7월 29일 당일에 포스팅도 했던데... 그 날 포스팅을 읽어보시면 저의 슬픈 과거가 드러납니당...T^T 4일간 밤샘 디버깅했던 그 작업이!!!
고작 Qemu 버전의 오류였음이!! 끼야옭!!!
오늘 다룰 주제는 생각보다 간단해요! 항상 리눅스를 극찬하며 리눅스를 사용하라고 여러분께 전도하는 야미이지만, 리눅스에서도 Real Time Synchronization 하는 방법으로 사용하는 것을 오늘 진행할거예요!!
참, 그리구 저는 오늘 밤을 기준으로 5일간 제주도와 함께하러 가서... 시간이 나면 포스팅을 할 생각이지만 어떻게될지 잘 모르겠네여!! 제주도 가서도 심심하면 개발하려고 맥뿍을 항상 들고다니는 야미랍니다!!(이러다 맥뿍 잃어버리면 엄청난 현타가 몰려올 듯 싶네여...)
Timer device
11일차에서 진행했던 PIC 컨트롤러가 기억나시나요!? 그 막 프린터기랑 플로피디스크가 출현했던 그곳!! 거기서 IRQ(Interrupt Request)라는 것을 접했어여! 기억이 안나시면 T^T 다시 공부를.. 쿨럭... 그 때, 마스터 PIC 컨트롤러에 연결된 IRQ 0번이 바로 오늘 우리가 진행하는 것과 관련된 "타이머 디바이스(Timer Device)" 랍니다!!
항상 모든 것이 연결되어 있어서 이 전에 공부했던 내용이 기억이 안나시면 한 번 더 공부하시는 것을 추천드릴게요! 왜냐하면 나중에 PIC를 한 단계 업그레이드한 APIC(Advanced PIC)로 갈아타게 되는데, 이 때 더 깊은 PIC를 공부할테니까요!! 그 때 가서 하시겠다구요? 넵... 쭈굴...
이 IRQ 0번에 연결되는 Timer Device를 Programmable Interval Timer라고도 하는데, 이것이 오늘 진행하는 PIT라는 컨트롤러예요!
그리고 두 번째로 "타임 스탬프 카운터"라는 용어가 나왔어요. 타임 스탬프라는 단어가 리눅스에서도 많이 사용되는데 한 번 알아볼까요?!
timestamp
Time Stamp : 특정한 시간을 나타내는 문자열을 일컫는다고 해요. 실제 시간 정보를 타임스탬프 형식에 따라 기록하는 것을 TimeStamping이라고 하며, 파일시스템에서는 파일의 생성시간 / 수정시간 등을 나타내기도 해요.
라고 말하면 리눅스를 사용하지 않으시는 분들에게는 낯설 수가 있다고 생각이 들어서!! 위키백갓의 어여쁜 예제를 드릴게여!
Tue 01-01-2009 6:00
2005-10-30 T 10:45 UTC
2007-11-09 T 11:20 UTC
Sat Jul 23 02:16:57 2005
1256953732 (유닉스 시간)
(1969-07-21 T 02:56 UTC) –
07:38, 11 December 2012 (UTC)
아하! 그냥 시간 표시를 어떻게 할 것이냐~ 를 의미하는 거였군여!! 이렇게 쉽게 말해주면 될 것을 저렇게 주저리주저리... 가 아니져!! 정확한 뜻을 알아두고 스스로 좀 더 쉽게 이해하면 되는거죠! 그럼 그 다음으로 타임 스탬프 카운터는 무엇일까요? 그냥 타임 스탬프 형식으로 나타낸 시간 카운터..?
TSC
Time Stamp Counter : TSC라는 약어를 사용하고, x86 프로세서 그 이상으로는 모두 탑재하고있는 64비트 레지스터라고 해요. 프로세서 리셋 이후의 사이클 수를 계산해주는 레지스터인데, 어셈블리 명령어로 RDTSC(Read Time Stamp Counter)를 사용해요. 이 명령어는 EDX:EAX 에 계산되어진 사이클 수, 즉 TSC를 반환시켜 준다고 하네요!
사실 TSC 같이 눈으로 볼 수 없는 것은 와닿지가 않지만!! 이런 것이 있구나~ 생각하고 우선은 넘어가자구요! 이따가 또 쓰일테니까요...흫흐흫
그리고 마지막으로 RTC라는 용어가 나왔어요. Real Time Clock이라고 실제 시간을 기록한다고 하는데, 이것은 컴퓨터의 전원에 관계없이 디지털 회로의 카운터를 이용해 시간을 기록해요!! 우왕 디지털인데 전원이 없이 된다구여?! 말이야 방구야~ 도와줘요 위키백갓!!
1. 날짜와 시, 분, 초 등의 시간을 카운터하는 디지털 카운터 회로로 구성한다.
2. 카운터 회로에서 사용하는 클럭 발생회로에 필요한 수정 발진자(결정 진동자)로 마이크로프로세서와 별도로 주로 32.768kHz을 많이 사용한다.
3. 카운터 회로가 컴퓨터의 전원이 꺼져도 배터리를 사용하여 카운터 회로에 전원을 계속 공급하여 시간 카운터 동작을 유지한다.
조금 더 알고 싶으신 분을 위한 출처를 남겨여 !! https://ko.wikipedia.org/wiki/실시간_시계
저 3가지 설명이 이해가 전혀 1도 되지 않지만, 저는 저 숫자를 보자마자 든 생각이 있어요. 2의 15제곱이죠! 핳핳ㅎ하핳하핳하하 죄송ㅎㅐ여... 2의 16제곱이 65,536이라는 것은 초등학생때 MS Excel에서 체험해보았기 때문에..(엑셀의 행이 65,536개가 최대였어요.) 눈이 가네요 눈이가~ 새우깡에 눈이 ㄱ 이 RTC는 CPU의 개입없이 계속 시간을 측정하기 위한 모듈이라고 기억하고 넘어가야 할 것 같아요! CPU도 개입 안하는데 우리가 개입하면 왠지 납땜을 시작하며 슈퍼캐퍼시터를 만져야할 것 같고 그렇거든요!! 만지고 싶으시다구여..? 얼른 하드웨어를 가르치라구여..?
아녀 여러분께 하는 말이 아니라 슈퍼캐퍼시터한테 한말이예옇ㅎㅎㅎㅎ후ㅜㅠㅜ 물론 제가 논리회로를 무지 좋아하긴 했지만, 직접 만지기엔 손이 무지 느리고 섬세하지 못해서 하드웨어는 못만질 것 같아여 ㅠㅜㅠ우리 컴퓨터만 하면 안되나여?
이렇게 3가지를 이번 챕터에서 배운다고 하네여!! 이 후에 진행되는 것을 보니.. 역시 갓승훈 선생님께서 너무나도 정리를 잘해주셔가지구 제가 또 설명 드릴게 없어보여요... 음 중간 중간 인터럽트를 걸어볼까요!?
BCD코드란 Binary-coded Decimal의 약어로, 8421 코드라고도 해요. 2진수를 생각해봤을 때, 1111(2)는 뒤에서부터 2^0, 2^1, 2^2, 2^3 이므로 1,2,4,8 순서잖아요!? 그런데 누가 뒤에서부터 보나요! 앞에서부터 봐야지! 그리해서 가장 하위 4비트는 8421 순서이기 때문에 8421코드라고 하며 이를 기본으로 BCD코드라고 부른답니다!
이 BCD코드(8421코드)가 유명한 이유로 여러가지가 있지만, 우리와 가까운 것부터 생각해볼게요! 시계!!(야미님 오늘 시간에 대해서 진행한다고 시계가 우리와 가장 가까울 것이라고 생각하시면 큰 오예입니다) 디지털 시계를 보시면 09:37:53 과 같이 표시하잖아요? 각 숫자 하나 하나(0, 9, 3, 7, 5, 3)를 2진수로 표현한다고 했을 때, 10진수의 가장 큰 수인 9를 표현할 수 있는 2진수는 4비트예요!!(3비트를 사용하면 4+2+1 = 7 이므로 9를 표현할 수 없으며, 4비트를 사용하면 8+4+2+1 = 15 이므로 9를 충분히 표현할 수 있죠) 그렇기에 BCD코드가 가장 널리 쓰이는 거예요!
다음으로 넘어가면 책에 "PIT 컨트롤러의 내부 클록은 1.193182MHz로 동작하며.." 라고 기술되어 있는데, 좀 더 자세히 알아볼게요!
인텔 8253 PIT로 시작하였고, IBM PC 호환 제품에만 사용되던 타이머 장치였다고 해요. NTSC에서 쓰이는 컬러 버스트의 1/3과 시스템 클록 수정 발진기의 1/12를 계산하면 1.193182MHz가 나온다고 하는데, 이 계산까지 해드리기엔 제 수학적 두뇌가 너무나도 딸리기에 패스할게여!! 수학 좋아하시는분, 지금 이 시계따위와 놀고싶지 않으신 분께서는 찾아보셔서 계산해보세여!! 단위 잘 맞추셔야해요!!
그런데 NTSC는 또 뭐고 컬러 버스트는 또 뭘까요? 수정 발진기는!? 왠지 저것들은 컴퓨터 용어가 아닌 것 같은데? 그냥 패스하면 안될까여? ㅇ..아..안되겠죠?
NTSC, Color burst
NTSC : 국가 텔레비전 시스템위원회(National Television System Committee)라고 하여, 딱 봐도 미국에서 만든 위원회 같은데 우리나라도 포함되어 있네요.
컬러 버스트 : 컬러 텔레비전 신호에서 색차 부반송파를 동기화하는 데 사용되는 비디오 신호 생성기로 생성되는 아날로그 비디오 합성 비디오 신호라고 하는데 도저히 뭐라는지 1도 모르겠어여 ㅗㅜㅑ~(요새 유행하던데 오우야~ 대박이다~ 뭐 이런의미래요!)
그럼 세계적인 협회인 NTSC에서 지정한 컬러 버스트의 주파수가 몇이기에 1/3을 하는걸까여? 아니 저 계산하기 싫었는데 넘나 궁금하지 않아여? ㅜㅠㅜ못참겠다는... IBM PC의 Intel 8253 Interval Timer로 1.1932MHz라고 나와있어요! 나누기는 각자의 몫으로...ㅎㅎㅎ
그 다음으로 수정 발진기를 한 번 알아봐요!
crystal oscillator
수정 발진기 : 압전기 물질의 결정이 진동할 때 생기는 기계적인 공명을 이용하여 전기 발진기이며, 정확한 주파수를 만든다. 압전 물질로는 대부분 수정(quartz) 결정체를 사용하기 때문에 수정발진기로 알려져 있으나, 다결정 세라믹(polycrystalline ceramics)를 사용할 수도 있다. 수정발진기는 보통 수십 kHz 부터 수십 MHz 까지 발진하는 소자를 만든다. 가장 일반적인 사용자 장치로는 시계, 라디오, 컴퓨터, 이동전화기 등에 사용한다. 전자 장비 중, 카운터, 신호 발생기, 오실로스코프 등의 실험장비에서도 사용한다고 하는데...
도저히 이해가 1도 되지 않아여 오늘은 그냥 이해란 없는 과목같을만큼... 그래서 조.금.더 찾아보기 위해 영문 위키백갓으로 넘어갔더니... 역사와 수술, 모델링.. 제가 잘못했어여 이건 천재적인 하드웨어느님들과 물리학분들께 맡길래여... 출처드릴까여? ㅎㅎㅎㅎ저 이거보자마자 개발하고싶어졌어여 개발만큼 좋은게 없어요 여러분!!!
수정 발진기 영문 출처 : https://en.wikipedia.org/wiki/Crystal_oscillator
전 얼른 수정 발진기에 대한 것을 잊고싶어요! 1.193182MHz는 계산 안할래여!!
그래서 얼른 그 페이지를 떠나 열심히 넘어갔더니 래치(Latch) 커맨드라는 단어가 불쑥 튀어나왔어요! 그런데 제가 알고있는 래치와 같은게 맞는건지 잘 모르겠네요.. 제가 아는 바는 논리회로의 SR래치 / D플립플롭 / JK플립플롭 / T플립플롭에서 나오는 래치인데, 열심히 구글링을 해봐도 커맨드라거나 명령어에 대한 이야기는 없네요... PLC(Programmable Logic Controller)라는 장치에 있는 래치 명령어는 논리회로와 같은 것 같구요...
그래서 SR래치에 대해 간략히 설명드릴게요!!
래치(Latch)란, 출력 비트의 값이 바뀔 때까지 현재 비트를 유지하는 회로를 말해요. 0과 1로 구성된 클록 주파수가 있는데, 이 클록 주파수를 이용해 입력값에 따라 출력값이 변하기 때문에 이것을 AND 게이트 / OR 게이트 / NOR 게이트를 이용해 여러가지 플립플롭이 탄생했지요!
그 중에서 SR래치가 가장 기본적으로 나온 Set-Reset 래치예요. 아래 사진과 같이 S 단자와 R 단자가 있으며, 0이 들어가고 있으면 아무런 변화가 없는 것이므로 검정색, 1이 들어가면 Power On과 같이 계속 값이 들어오기 때문에 변화가 일어나게 됩니다!(플립플롭에서는 1이 들어가는 것과 다르게 Toggle 값이라고 하여 0 → 1 또는 1 → 0 으로 변화가 일어날 때 값이 변동되도록 되어있어요!)
S 단자와 R 단자 모두 검정색일때는 현재 값(Q 혹은 Q')을 유지하는 현상을 나타내고, R 단자에만 1이 들어가면 Reset과 함께 Q의 값은 0, S 단자에만 1이 들어가면 Set과 함께 Q의 값이 1로 변하게 되는거예요! 왜 한 쪽에만 1을 넣느냐구요? 그것이 SR래치회로의 단점이예요. S 단자와 R 단자 모두에 1이 들어가면 Q = 0 * (1 + Q) → 0 * 1 = 0 이 되어서 Q는 이전의 값에 상관없이 0 이 되어버려요! 아니 그 이전에 Q가 필요가 없어져버리면서 나중에 문제를 야기할 수 있기 때문에 우리는 사용하지 않는 값이라는 표현으로 "부정" 이라고 표현해요!
여기서 더 설명이 들어가면 플립플롭부터... 디코더 인코더... 하앍 넘나 재밌지만 참아보겠어요!! 논리회로는 말 그대로 회로이기 때문에 직접 PCB를 만지시는 분들께 추천드릴게여 ㅎㅎㅎ PCB는 또 뭐냐구여? 그거있잖아여 반도체 판같은 거라고 생각하시면 돼여~(이정도면 야미는 귀찮음이 극에 달한느낌...)
혹시나 저를 귀차니즘으로 몰아버리실까봐.. 소심소심... 이게 PCB예여 반도체판맞져!? 하드웨어알못은 저렇게 초록색으로 생긴 기판은 전부 반도체판같단 말이져! 후훗!!
이렇게 래치 커맨드라는 부분을 넘어가도록 할게요!! IT 업계가 많은 것처럼 반도체 업계에도 사람이 많아서 래치회로 및 플립플롭 그 이상의 논리회로를 공부하고 싶으신 분들은 구글링하세여!! 두 번 하세여!! 정보의 바다예요!! 너무나도 넘쳐흐르는것~
그리고 챕터 16의 3절로 넘어오시면(오늘은 스압이 없을 것을 처음부터 예상하긴 했지만 이제 거의 끝남이 보이네여!! 벌써 3절이라니!!) 아까 우리가 다뤘던 RDTSC 명령어가 튀어나왔어요!! 그와 함께 RDMSR / WRMSR 명령어가 튀어나왔는데, 이는 MSR 레지스터를 알아봐야 할 것 같아요!
RDMSR 명령어와 WRMSR 명령어는 MSR 레지스터에 읽기/쓰기를 하기 위한 명령어이기 때문에 좋은 사이트만 알려드릴게요!
RDMSR : http://x86.renejeschke.de/html/file_module_x86_id_276.html
WRMSR : http://x86.renejeschke.de/html/file_module_x86_id_326.html
정리 참 잘되어있더라구여! 그럼 이제 MSR을 알아봐야겠죠?!
MSR
MSR(Model Specific Register)은 디버깅, 프로그램 실행 추적, 컴퓨터 성능 모니터링 및 특정 CPU 기능 전환에 사용되는 x86 명령어 세트의 다양한 제어 레지스터 중 하나라고 해요. 쓰이는 방법에 대해 자세히 찾아보려 했지만... 제가 설명드리기엔 어려운 점이 조금 있네요! 한 번 읽어보시죠 아래의 pdf를! 도전해보시라~
여러 값들이 지정되어 있는 것을 보여줬는데, 어떤 값이 필요한지 정확히 감이 안와서 말이예요... 뭔가 여러분께 던지고 튀는듯하지만 저의 머리를 탓해야죠 ㅜㅠ돌머리야미...
바로 다음페이지에 NMI 제어라는 말이 나오는데, NMI가 머져?
NMI
NMI(Non-Maskable Interrupt)는 시스템의 표준 인터럽트 마스크 기법을 무시할 수 없는 하드웨어 인터럽트라고 해요. 일반적으로 복구 불가능한 하드웨어 오류에 주의를 주기 위해 발생하는데, 좀 더 쉽게 설명드릴게요. 지금 시스템에서 중요한 프로세스가 돌아가고 있는데, 이 때 인터럽트가 들어오면 시스템이 다운될 확률이 높아지며 배드 섹터가 생겨 중요한 자료가 위험에 처해질 수 있어요. 이럴 때를 대비해 NMI를 제어하여 중요한 프로세스를 마크하지 못하도록 하고 NMI가 직접 인터럽트 처리를 하도록 하는 것이예요! 너무나 중요한 녀석이 아니지 않을 수가 없지 않나여?!
이러케나 중요한 인터럽트를 여태 제가 설명드린 적이 없다니 ㅜㅠ 죄송해여... 무능한 제탓...꺼이꺼이ㅜㅠ
이번 챕터는 이렇게 끝이 나고 구현부로 들어갔어요! 오늘은 뭔가 잡다한 지식을 내놓으며 별로 OS개발과 상관이 없던 이야기를 많이 한 것 같지만, 저도 몇 년 전에 공부했던 것이 갑자기 튀어나오기도 하고.. 그러다보니 모든 것을 다 알아야 하는 분야가 우리의 IT분야가 아닌가 싶어요! 힘들고 지쳐도 우리 화이팅해요 아쟈아쟈!!... 어...어?! 아... 안돼ㅠㅜㅠ
눙물이 나는군여ㅜㅠㅜ 화이팅 하기엔 다음 챕터부터는 곤욕이.. Task가 나오네여? Thread를 사용하고? 제가 여기서 또 디버깅을 얼마나했는데..! 하... 아녜여 잘 할 수 있으리라 ㅁ미미미ㅣ믿어 의심치 않아여!! 다음 챕터에서 뵈어여!!
Check out the yummyhit’s website for more info on who am i. If you have questions, you can ask them on E-mail.
댓글남기기