안녕하십니까 까마굽니다 (__)

 크윽... Add 명령을 조합하다가 도저히 지금의 구조로는 모든 명령에 대해 조합을맞추가기 어렵다는 결론이 났습니다.  MOV 까지는 잘 맞춰졌는데, Add가 되니까 약간씩 핀트가 어긋나서 다른 코드가 선택되는 걸 피할 수 가 없군요.

 으으... 이때까지 Register를 중심으로 Define하고 코드를 개발했었는데, 이게 오산이었습니다. 명령어의 Operand를 중심으로 했어야 하는데, 기존에 define 된걸 가지고 Operand를 맞출려고하니 무리가 있군요. Scanner 정도는 그냥 쓸수있을꺼 같은데, Parser랑 Code Generator는 완전히다시 써야 할듯 합니다.

 사실 생각한건데, Parser랑 Code Generator를 분리할 필요는 없다고 생각되네요. 분리를 하고 나니까 중복으로 검색하는것이 있어서, 하나로 합치는게 옳은거같군요. 일단 좌절입니다.

 아아.. 힘빠져.. ㅡ0ㅠ...다들 좋은하루 되세요 (__)

안녕하십니까 까마굽니다 (__)

삽질에 삽질을 거듭하다보니, 16bit와 32bit Asambler를 만들게... 머 그냥 Directive를 통해 전환이 가능한 형태이구요, 열심히 Intel의 테이블을보고 만들었습니다.

아직 LABEL에 대한 처리가 좀 미흡하고, mov 명령에 대한 구현 및 테스트를 하고있어서 다른 명령의 형식에는 어떻게 적용될지는 의문입니다만, 여튼 별반 수정없이처리할 수 있을꺼 같군요. 만들어 놓고도 참 신기합니다. 동작을 하긴 하는군요.

정말 이렇게 난잡한 프로그램은오래간만에 짜보는듯...Type Match를 위해 if-else switch의 난무.. ㅡ0ㅡ;;;;나중에 LABEL에 대한 마무리 처리를 조금 한다음, 소스코드를 좀더 간단하게 정리를해야 겠습니다. 아.. 오늘은 머리도 아프고 속도 영 않좋군요.병이 났나 봅니다 그려.. ㅋㅋㅋ그럼 다들 몸조심 하시고..

좋은하루 되세요 (__)

안녕하십니까 까마굽니다 (__)

요즘 Kkamagui Simple Asambler를 만든다고 끄적거리고 있습니다.

mov 명령을 일단 대상으로 잡고 열심히 Operand 에 따라서 선택되어지는 값들을

추려내어 nasm의 output과 비교하는 작업을 하고 있는데, 흠 사실 머 별로 재미가

없군요. 쩝쩝... 어셈블로도 index base 를 사용하는 접근( mov eax, dword[ eax +

ebx * 2 + 0x1000 ] 같은것들 )을 빼고 나머지는 좀 테스트를 해봤는데, MOD 바이트를

선택하는 것에는 별반 문제가 없어보입니다. 흠.. 일단 MOV에 대해서 어느정도 처리가

끝나면 기본적인 명령들을 추가해나가면서 테스트 할 생각이고요, 목표는 부트코드를

Kkamagui Simple Asambler로 컴파일하는건데, 진짜 별로 재미가 없군요. 쩝쩝...

머 좀 신나는일 없을까요??
 안녕하십니까 까마굽니다 (__)
 으으.. 오늘 Machine Code Generator를 만들다가, OpCode까지는 어케 선택을 해줬는데, Mod 및 SIB를 선택하지 못하여 하루종일 보냈슴다. 이제야 필을 받아서 일단 mov reg, reg 형식을 대략 완성하고 output을 냈는데요,다행이도 nasm이랑 output이 같게 나오는걸 보니, 테이블을 틀리게 만든건 아닌거같군요.

 흠, 아직 테이블을 좀더 만들고 테스트해야 하는게 있긴하지만 머, 일단 첫발을내딛었기땜시롱 한자 끄적여 봅니다. 처음에는 모든 경우의 수를 생각하고 Scanner랑 Parser를 만들었는데요, 오늘 딱생각하니 빼먹은것이 있군요.

 으으, 다 포함하려니 소스가 자꾸 복잡해져서리 일단간단하게 완성하고 덧붙이던가 해야 되겠군요.에궁, 징짜 너무 빡시네요.

 그럼 좋은하루 되세요 (__)아래는 테스트 결과
/////////////////////////////////////////////////////////////////////////////
//input file
/////////////////////////////////////////////////////////////////////////////
mov ebx, eax
mov ebx, ecx
mov ebx, edx
mov ebx, esi
mov ebx, edi
mov ecx, eax
mov ecx, ebx
mov ecx, ecx
mov ecx, edx
mov ecx, esi
mov ecx, edi
mov edx, eax
mov edx, ebx
mov edx, ecx
mov edx, edx
mov edx, esi
mov edx, edi
mov esi, eax
mov esi, ebx
mov esi, ecx
mov esi, edx
mov esi, esi
mov esi, edi
mov edi, eax
mov edi, ebx
mov edi, ecx
mov edi, edx
mov edi, esi
mov edi, edi

//////////////////////////////////////////////////////////////////////////////
// 아래는 Kkamagui Simple Asambler Output
//////////////////////////////////////////////////////////////////////////////
Output[89C3]
Output[89CB]
Output[89D3]
Output[89F3]
Output[89FB]
Output[89C1]
Output[89D9]
Output[89C9]
Output[89D1]
Output[89F1]
Output[89F9]
Output[89C2]
Output[89DA]
Output[89CA]
Output[89D2]
Output[89F2]
Output[89FA]
Output[89C6]
Output[89DE]
Output[89CE]
Output[89D6]
Output[89F6]
Output[89FE]
Output[89C7]
Output[89DF]
Output[89CF]
Output[89D7]
Output[89F7]
Output[89FF]

 안녕하십니까 까마굽니다 (__)
 요 이틀째 어셈블러 제작에 매달리고 있는데요, 오늘 오전즈음해서 scanner를테스트한 다음, 그 output을 parser에 넣고 문법을 검사하려다보니, 기본적인 검사를 하더라도, 어셈명령에 따른 operand의 갯수 같은 것이 필요하겠더라구요.

 그리고 머신코드를 생성할 때는 각 operand에 따른 머신 코드의 맵핑 테이블이필요한데, 막상 고민해보니 깔끔한 생각이 안떠오르더군요. 하드코딩을 안할려고 머신코드의 규칙을 살펴봤으나, prefix/MOD/SIB 머 이런것들은 일정한 규칙같은게 있던데, 머신코드는.. ㅡ0ㅡ;;;;;

 그래서 nasm을 참고할려고 들여다 봤더니, 쿠.. 쿨럭...걍.. 테이블이 하드코딩 되어있더군요. ㅠㅇㅠ/~~크윽... 그래서 일단 저도 하드코딩해서 테이블을 만들어 놓고 이제 parser를만들어 테스트를 할려고 생각중입니다.하.. 참나... 이거 무쟈게 빡시군요.기본적으로 제가 쓰는 명령만 구현하는데도, 한참 걸리겠습니다. 그려...일단 오늘도 삽질 @0@/~~

 그럼 좋은하루 되세요 (__)

 안녕하십니까 까마굽니다 (__)
 넹 커널을 릴리즈한지 며칠이 지났는데요, 다행이도 "왜 일케 짯어요??" "정신이 있는 사람이에요??" 이런식의 글이 올라오지 않아서 긴장을 풀고 있습니다. ㅋㅋㅋ사실 잔뜩 요 며칠 쫄아있었기 땜시롱, 워낙 허접한 코드를 릴리즈해놔서 이것 또한걱정이군요.

 ㅡ0ㅡ;;;흠, 당분간 커널 소스는 손을 안대고, 다른걸 쪼금씩 해볼 생각을 하고 있습니다.머, 다음에 손보게 되면, FAT를 좀더 보강하고, 스레드를 구현해 넣고 GUI 함수약간 더 추가하는 정도가 될것 같군요.스레드와 GUI 함수에 대해서는 아직 뚜렷한 방향이 잡히지 않아서 약간 시간이 걸리겠구요, FAT 루틴은 사실 약간 보강이 된 상태인데 추가해야 할 부분이 생겨서그부분에 대한 처리를 미뤄둔 상태입니다.

 음, 글고보니 응용 프로그램용 라이브러리와 응용프로그램 전송하는 방법에 대한언급이 없었네요. 이것도 시간나는대로 릴리즈를... ㅋㅋㅋ아아, 눈탱이가 아프군요... 갑자기 왜이러지...그만 자야겠습니다.

 다들 좋은밤 되세요 (__)

 안녕하십니까 까마굽니다 (__)
 오늘 한번 어셈블러를 끄적거려 볼려고 했었습니다만, 쇼크만 먹었습니다.흠, 전 지금까지 Opcode는 각 명령에 대해서 1:1로 대응되는줄 알고있었기때문에,쉽게 보고 있었는데, 오늘 문서를 보니 같은 mov라도 뒤의 Operand에 따라서 Opcode가 틀리더군요.

 또 뒤에 오는 Operand 타입에 따라서 옵션으로 설정되는 것들이 있고, 으아~~ 어찌나 복잡하던지...하는수 없이, 책을 일단 쬐금 복사한다음 nasm을 이용해서 역어셈해가면서 봤습니다.규칙이 있긴하던데, 머 관건은 머신코드를 작성할때 적절한 Opcode를 선택하기위해서는 Operand의 Type을 알고있어야 한다는 결론에 봉착한것 말고는 별 소득이 없네요.테이블도 몇개를 이용해야 될꺼 같고, 으음 일단 mov 명령을 잘 뜯어본다음 nasm과동일한 output이 나오도록 한번 해봐야 겠습니다.

 그러려고하니 문제가, scanner를 만들어야 하겠는데 머 만드는거야 별 문제가 없지만 중요한건 scanner의 output을 parser가 가지고가서 문법 체크를 하고, 다시 이걸넘겨받아서 머신코드를 만드는 놈이 output을 만들어 내야 하는데, scanner의 output을 어떤식으로 할지가 문제군요.머 일단 Token단위로 자른다 치면, scanner의 output으로는 Token별 String도 있어야 할터인데 어떤식으로 할지 걱정이군요.걍 Queue에 넣어버릴까나, 쩝쩝... 암생각하지말고 String의 크기만큼 동적할당해서걍 스트링 복사한다음 Queue에 넣는 무식한 방법도 생각하고 있습니다.

 오홀홀홀.. 혹시 머 좋은 생각 있으신분 계신가요??있으시면 답글좀...
 그럼 좋은하루 되세요 (__)

 안녕하십니까 까마굽니다 (__)
 요즘 계속 소스를 정리한다고 거의 기능 추가부분은 손을 안대고 있습니다.그래도 계속 무리를 좀 했더니 대충은 끝나 가는군요.사실, 세부적인 정리는 안했고 그냥 인덴트랑 주석을 좀 정리하고, 가장 중요한디버깅 코드들을 삭제하는데 중점을 두었습니다.

 머 사실 몇몇 파일들은 한참 개발중이기 때문에 정리자체가 무의미 하다고 생각되어 무시한것도 있습니다만, 여튼 끝이 보입니다.이제 파일도 몇개 안남았는데( 사실 무쟈게 많더군요... ㅡ0ㅠ.. 죽는줄 알았음 또 소스는 얼마나 긴지.. 꼭 공부 못하는 애들이 코드가 길듯.. ), 정리 되고 나면커널 소스를 올리겠습니다.

 그럼 좋은하루 되세요 (__)
 ps) 홧팅입니다 @0@/~~

 안녕하십니까 까마굽니다 (__)
 크윽, 소스를 밤낮 할꺼 없이 좀 무리해서 정리를 했더니만, 동작이 이상하군요.ㅡ0ㅠ 분명 정리하다가 멀 같이 지워버린거 같습니다.

 크윽 젠장, 두군데나 벌써 이상이 생겼는데요, 막막하군요. 정리를 마저하고 디버깅을 해야 할지, 아니면 일단 지금 해결하고 다시 정리를 시작해야 할지...한가지 분명한건, 잘못 정리했다는 것이죠.

 ㅡ0ㅠ.. 아아, 젠장 젠장...소스는 정신이 말짱할때만 봐야 겠네요.
 그럼 좋은하루 되세요 (__)
 
 ps) 요즘 질답란의 폭주로 인해 상당히 뿌듯하다는...모두들 홧팅입니다. @0@/~

안녕하십니까 까마굽니다 (__)

오늘 thread에 대해서 고민하다가 문득 pthread라는 놈의 소스를 보게 되었습니다. 전 pthread는 user level이라고 알고 있었는데, 아니더군요. ㅡ0ㅡ;;; 역시 나의 지식은 허망한것이었음... http://www.gnu.org/software/pth/pth-manual.html
 
위 링크는 GNU Portable Thread 라는 user level thread에 대한 문서인데요, 내용이 참 잘되어있군요. 제가 궁금해하던 "user level thread에서 과연 preemptive 하게 context switching이 가능한가??" 에 대한 물음을 단 한자로.. 압축해 놓았더군요. 충격이었습니다. SIGVTALRM... ㅡ0ㅡ...
 
결국 signal을 이용하면 간단히 스위칭을할 수 있었군요. ㅡ0ㅠ... 저걸 이용해서 user level의 thread library를 만들면, 커널 만드는 거랑 비슷할 것 같습니다. 사실 스케줄링 부분은 크게 다를것이 없으니...
 
시간이 나면 GNU Portable Thread도 차근 차근 한번 봐야겠습니다. 가능하면 포팅도 한판 때리는 쪽으로... 아직 먼 이야기지만... 좋은밤 되세요 (__)

안녕하십니까 까마굽니다 (__)요즘 틈틈이 시간을 내서 이제껏 정신없이 짜왔던 코드들을 정리하고 있는데요,우오.. 워낙 많다보니 시간도 장난아니게 걸리고 한 함수가 정리 끝나면테스트하고, 다시 확인하고...진짜 장난아닙니다. ㅡ0ㅠ... 내가 왜 이걸 하고 있나 싶기도 하고...워낙 디버깅 코드들이 즐비하고, 마구잡이로 추가된 소스들을 걸러내야 하기 땜시한번은 해야할 작업인데, 영 의욕이 나지 않는군요.원래 한번 짠 코드는 손을 안대는 성미라... ㅡ_ㅡ;;;아.. 글고보니 지금껏 짯던 놈들은 앵간하면 손을 다시 안댔네요.흠... 하긴 그것들은 그리 복잡하고 덩치큰 놈들이 아니었으니 그럴수도......하여튼 왕 짜증입니다.날씨도 덥고... 쯧쯧...더위 조심하시고 좋은하루 되세요 (__)
안녕하십니까 까마굽니다 (__)오늘 번쩍 떠오른게 있어서 그걸 처리하기위해 노트북을 폈는데,어떤 부분이냐 하면 Serial을 통해 파일을 수신하는 부분이었습니다.잘되는 부분이긴한데, 간혹 보면 파일이 다 수신되지 않는 상황이 있어서 코드를 보게 됬는데요, 머 일단 속도를 좀 높이기 위해 약간의 삽질(??)을 하고실행을 딱 시키는 순간.. 앗찔하더군요.. ㅡ_ㅡ;;;아.. 글쎄.. 한 Task가 Serial Read를 줄기차게 요청하는데, 문제는 이놈이CPU를 독점하고 있던 것이었습니다.쿠.. 쿨럭;;;;사실 독점할만할 이유가 없었기때문에 상당히 당황스러웠는데 코드를 보는순간그럴수도 있겠다는 생각이 들더군요.코드는 대략 이렇습니다.while( 1 ){ dwRead = read( dwSerialFd , vbBuffer , sizeof( vbBuffer );}int read( ... ){  InNotSwitchingSection();  readFromSerial(...);  OutNotSwitchingSection();}코드를 보시면 InNotSwitchingSection() 이 스위칭을 불가하는 부분이구요,OutNotSwitchingSection()이 다시 가능하게 하는 부분입니다.요게 계속 루프를 돌니까, Timer Interrupt가 발생해서 스위칭을 하려고 보니InNotSwithchingSection()이 되어 스위칭 불가한 상황이 많아서 거의 스위칭을 하지 못하고 있더군요.사실 소비하는 시간으로 보면 스위칭 가능보다 불가로 있는 시간이 더긴....그래서 운이 좋으면 스위칭 될때고 있고.. ㅡ_ㅡ;;;;; 그런 상황이었습니다..그래서 이를 해결하고자.. kOutNotSwitchingSection()에서 만약 태스크가 자기에게 할당받은 Time Slice를 다 사용했을 경우, 강제로 다른 태스크로 스위칭 해주어 골고루 CPU를 사용할 수 있게 수정했습니다. 지금까지는 별 이상이 없어보이는데, 역시 두고봐야하겠죠..흠... 하다보니.. 이런 경우도 생기는 군요..그럼 좋은하루 되세요 (__)
안녕하십니까 까마굽니다 (__)

요 며칠 삽질끝에 드디어 앵간한건 다 갈아 치웠습니다. 

상당히 골머리가 아픈 부분도 있었지만, 일단 교체에 목적을 두고..교체 -> 테스트 -> 교체 -> 테스트요걸 반복한 결과 대부분이 교체가 되었습니다

 흐음.. 머 실행해보니.. 저번이랑 크게 다른점은 없는데요, 머랄까.. 약간은 더 부드러워졌다고 해야하나...

 먼가.. 묵직한 느낌이 사라졌다고 하나? 여튼 그렇습니다 좀더 세부적인 사항을 마저 정리한다음 릴리즈를 한판.. ㅋㅋㅋ 

아.. 피곤하군요..그람 좋은하루 되세요 (__)

안녕하십니까 까마굽니다 (__)

오늘 인터럽터 불가영역을 줄이기위해 열심히 고민하다가

대략 해결책이 나왔습니다..

관심있으신분은 한번 읽어보시구요.. 더 좋은 방법이나 참고사항 있으시면..

답글을 남겨주세요

그럼 좋은하루되세요 (__)

http://kkamagui.codesum.org/board/read.php?table=tip&no=19

안녕하십니까 까마굽니다 (__)

으음, 제가 Bmp, Icon 파일을 분석할때 참고했던 문서입니다.

도움이 되시길 바라며~ ^0^/~

그럼..

http://kkamagui.codesum.org/board/read.php?table=tip&no=17

안녕하십니까 까마굽니다 (__)이제 Icon Loader를 만들고 있습니다. 거의 다 됬구요 사실 구조를 보니 BMP와거의 틀릴것이 없어서 BMP 루틴을 이용해서 Loader를 만들었습니다.머 output은 생성되니 이제 곧 Icon이 올라간 KKAMAGUI를 볼 수 있겠군요..제가 좋아하는 Black의 Icon들이 하드에 가득 있는데, 으흣.. >_<글고 곧 커서도 네모박스가 아닌, 화살표로.. ㅋㅋㅋ오늘 커서로 사용할 아이콘을 찾았거든요.. 적용되고 나면 스샷 한컷 올리고커널을 또 릴리즈 하도록 하지요..아.. 정말 소스 릴리즈 해야하는데... 자꾸 진도만 나가고.. 정리는 하나도안하고 있군요. ㅡ_ㅡa.. 이러다 영영 못하는거 아닌가 몰겟네.. >_<그럼 좋은하루 되세요 (__)
안녕하십니까 까마굽니다 (__)

미루고 미루던 윈도우의 폰트를 변경하는 작업을 오늘에서야 하고 말았습니다.

그러고 나니, 이제 멀할지 공허한 상태가 되더군요. ㅡ_ㅡ;;;;;

GUI도 머 다른거 없이 아주 간단하게만 해놓으려고 생각하고 있는 차라서...

이제 좀더 추가할것이라면, ico파일 같은걸 이용해서 커서를 바꿔준다거나,

아니면 jpg 같은 여러 그래픽 포멧들을 이용해서 화면에 그릴수 있게 해준다거나,

머 이정도 밖에는 안할꺼고.. 아직 없는거는 이제 윈도우간의 종속관계.. 즉

자식윈도우가 부모윈도우에 종속된 경우, 이런경우는 자식 윈도우의 영역도

부모 윈도우의 안일것이고, 부모 윈도우가 이동하면 자식윈도우도 그 위에서 같이

이동해 줘야하는데, 요런처리만 어케 잘 해주면 허접하지만 기본 뼈대는

되었다고 생각합니다.

일단 머 여기까지만 할려구 하는데, 이걸하고나면 다음에는 멀 하면 될까하는 생각

이 먼저 드는군요.

헐 머 일단 하던거나 마져하고 그래야겠군요~ ㅋㅋㅋㅋ

그람 좋은하루 되세요 (__)

안녕하십니까 까마굽니다 (__)

요즘 안그래도 Font가 별로 안이뻐서 어케 할까 생각중인차에..

Bellona2 주인장님의 Font가 상당히 이쁘다는 점을 생각해내고 소스를 뒤지던차

Font Editor를 발견했습니다..

오옷.. 물론 저도 비슷한 기능을 하는 툴을 만들어 쓰고 있긴 한데..

Bellona2 주인장님껄 써보니.. 걍.. 이걸 써야 겠다는 생각이 드는군요.. ㅋㅋㅋ

일단 허락을 요청해 놨는데, 가능하면 폰트를 다른 걸로 바꿔야 겠군요..

지금의 것은 너무 투박해서리..

그럼 좋은하루 되세요 (__)

안녕하십니까 까마굽니다 (__)안할려다가.. 오늘 그냥 선그리기 함수를 추가 했습니다.. 그래픽 관련 함수를 하나 하나 추가할때 마다 느끼는거지만..정말 산수 노가다군요.. ㅡ_ㅡ;;; 초 에랍니다 그려..머 그래도 라인이 그려지는걸 보니 참 신기하긴 한데..문제가 조금 있는것이.. 아.. 그 왜 있잖아요.. 두깨가 n Pixel인 라인을 그리는 함수..그걸 일단 구현했는데, 갑자기 궁금한것이..만약 (1,1) -> (30,40) 으로 두깨가 3인 라인을 그리게 한다고 치면,그 중심은 과연 어디가 되어야 하는지..(1,1) -> (30,40) 이 되어야 할지.. 아니면..(1,2) -> (30,41) 이 되어야 할지...이게 갑자기 궁금해 져서..으음..어케 해야 할까나...혹시 아시는분 계세요??그럼 좋은하루 되세요(__)
안녕하십니까 까마굽니다 (__)

오늘 GUI Console 에 커서를 그리다가 발견한 문제인데요.. ㅡ_ㅡ;;;

지금은 GUI Console이 파이프를 통해서 Application을 통해 메시지를 받아서..
바로바로 화면에 그리는 식으로 되어있습니다.

머 커서를 그리기 전까지는 별 문제가 없었는데요, 커서를 그리고 나니..발견된 문제점.. ㅡ_ㅡ;;;
커서가 이동되면 이전에 커서가 있던 위치를 다시 복원해주고, 옮겨줘야 한다는거지용.

글고.. gotoxy 요런거랑 printxy요런 함수들을 Application에게 지원해주고 있는데,
저 두함수를 섞에서 쓰니 문제 발생..

즉.. 커서 안옮기고 글자부터 찍고 커서 옮기면.. 화면에 커서가 있던자리에글자가 지워짐...
반대의 경우 커서가 지워짐... ㅡ_ㅡ;;;

당체.. 이게 먼일인지...다시해야 겠군요. ㅠㅠ

그럼 좋은하루 되세요(__)

안녕하십니까 까마굽니다 (__)
어제 밤새 노가다를 하여 GUI Application을 하나 만들어내고..그 기쁨으로 V*Ware에서 실행하던 중... 느린속도에 답답함을 느꼈습니다..헐..

그래서 번득 생각난 것이"그래..!! 요걸 실제로 부팅해서 실행해 보는거야.."
참고로 제 PC는 파티션 두개가 모두 FAT32로 포멧되어 있기 땜시롱 플로피에 커널을옮겨서 부팅만 하면 언제든지 하드의 내용을 읽을수 있게 되어있습니다. 뭐... 플로피에 옮겨서 부팅하던중, 플로피에 잘못 써졌는지 처음에 부팅이되지 않더군요..
 
그래서 아무 생각없이 다시 커널을 플로피에 옮긴다음 재부팅을 했더랬지요. 이번엔 정상적이었습니다. 앗쌀~을 외치며 mount 되어있는 제 노트북 하드에 접근하는거 까지는 좋았는데... 문제는 Application을 읽어야 하므로, 파일을 read 하는 순간... 문제는 터졌더랬죠.

Read 하고난 뒤에 파일이 온데간데 없고, root directory의 젤 첫번째 부분이링크되어 물려있었던 것이었답니다. 헑...다행히 루프로 물려져 있지 않아서... 그 파일만 사라지고, 마치 바로가기가 주욱 생긴것처럼 요상한 모양을 띠게 되었지만, 여튼 일단 수숩... 몇번반복하니 하드가 난장판이 되더군요.

그래서 새로 OS를 깔고 했는데, 원래 윈도우 2000을 사용하다가 오늘 XP로 업글을 한판... 근데... 무쟈게 느립니다. ㅡ_ㅡ;;; 뭐.. 덕분에 버그 한마리를 또 잡았지만...값비싼 댓가를 치르게 되었네요... 아직 윈도우 업데이트하는 중... 당체 이놈은 언제까지 할라고 하는건지... 원... 쩝쩝... 그래도 새로 만든 GUI Application이 GUI manager와 맞물려서 크게 무리없이 돌아가는걸 보니, 나름대로 좀 흐뭇하군요. 이걸로 위안이나 삼아야 겠습니다. 크하하핫. >_<

 그럼 다들 좋은하루 되세요 (__)

안녕하십니까 까마굽니다 (__)흠.. 오늘까지 그래픽 버퍼에 관련된 여러 부분을 테스트하고..머 별 이상 없는거 같아서 한자 적어 올립니다.머.. 평소의 저라면 당근 동기화 하는데 세머포어나 뮤텍스를 이용했겠지만..사실 일케 되면, 그리는 부분에 시간이 상당히 들어가므로 동시에 프로세스가화면에 그려야 할때, 한놈이 그 윈도우를 선택해서 그리는 동안 다른 프로세스는그녀석이 다 그리고 락을 내릴때 까지 기다려야 겠지요..머.. Draw 자체가 빠르다면 큰 문제는 아닌데, 사실 화면에 Draw하는 부분이다른것들에 비하면 굉장히 시간이 많이 드는 부분이라 자칫 시스템 자체가느릿해지는 일이 발생할 수도 있어서 단순히 세머포어나 뮤텍스를 이용해서락을 걸지 않았습니다..여기서 잠깐 또 언급하자면, 사실 윈도우 전체가 변경되어 다시 그려지는 경우 역시 앵간하면 드물고( 미디어 플레이어 같은 종류를 제외하고.. ) 이동 또한 별로 많지 않기 때문에 거의 대부분 버퍼를 있는 그대로 읽어서 그리는 역할이라고생각됩니다..그렇다면 사실 배타적인 동작을 할때만 서로 배제를 해주고, 동일한 읽기를 수행할때는 그냥 읽을 수 있게 했습니다.흠.. 프로세스 하나가 화면에 열심히 그려도 마우스가 별로 느려지지 않는군요..윈도우 이동 역시 버퍼의 내용이 그려지거나 변경되고 있는 동안에는 끝날때까지기다리게 만들어서 그려지다 옮겨져서 나머지가 그려지는 그런 불상사도 처리가됬습니다.아직 좀더 지켜봐야 겠지만 일단은 이렇게 해놨는데요..머.. 별일 없을꺼 같네요..그럼 좋은하루 되세요 (__)
안녕하십니까 까마굽니다 (__)
흠.. 오늘까지 그래픽 버퍼에 관련된 여러 부분을 테스트하고..
머 별 이상 없는거 같아서 한자 적어 올립니다.
머.. 평소의 저라면 당근 동기화 하는데 세머포어나 뮤텍스를 이용했겠지만..
사실 일케 되면, 그리는 부분에 시간이 상당히 들어가므로 동시에 프로세스가
화면에 그려야 할때, 한놈이 그 윈도우를 선택해서 그리는 동안 다른 프로세스는
그녀석이 다 그리고 락을 내릴때 까지 기다려야 겠지요..
머.. Draw 자체가 빠르다면 큰 문제는 아닌데, 사실 화면에 Draw하는 부분이
다른것들에 비하면 굉장히 시간이 많이 드는 부분이라 자칫 시스템 자체가
느릿해지는 일이 발생할 수도 있어서 단순히 세머포어나 뮤텍스를 이용해서
락을 걸지 않았습니다..
여기서 잠깐 또 언급하자면, 사실 윈도우 전체가 변경되어 다시 그려지는 경우 
역시 앵간하면 드물고( 미디어 플레이어 같은 종류를 제외하고.. ) 이동 또한 
별로 많지 않기 때문에 거의 대부분 버퍼를 있는 그대로 읽어서 그리는 역할이라고
생각됩니다..
그렇다면 사실 배타적인 동작을 할때만 서로 배제를 해주고, 동일한 읽기를 수행할
때는 그냥 읽을 수 있게 하는게 맞지 않습니까??
일단 그런 생각을 가지고 구현했는데요..
흠.. 프로세스 하나가 화면에 열심히 그려도 마우스가 별로 느려지지 않는군요..
윈도우 이동 역시 버퍼의 내용이 그려지거나 변경되고 있는 동안에는 끝날때까지
기다리게 만들어서 그려지다 옮겨져서 나머지가 그려지는 그런 불상사도 처리가
됬습니다.
아직 좀더 지켜봐야 겠지만 일단은 이렇게 해놨는데요..
머.. 별일 없을꺼 같네요..
그럼 좋은하루 되세요 (__)
안녕하십니까 까마굽니다 (__)오늘 오후에 출근해서 정리된 커널로 시리얼 송수신 테스트를 하다가..깜딱 놀랐습니다.. ㅡ_ㅡ;;;왜냐하면 파일 읽기에서 실패가 났기 때문이죠.. ㅡ0ㅡ;;;;이번에 정리한 부분은 GUI 부분이었지 파일 관련 부분이 아니었기에 더욱 황당했습니다. 쩝쩝.. 그래서 이전에 릴리즈한 커널로 덮어씌워 부팅을 했더니만.. 얼래.. 이번에는 CUI 콘솔 자체가 이상하군요..Bochs가 이상해 진거 같습니다. 쩝쩝.. 다시 깔아야 할듯도 하고..아니면.. 테스트 환경이 변해서.. 그럴수도 있고..예를들면.. 마운트 하는 지점이 변경되서.. ㅡ_ㅡ;;;;;아.. 또 디버깅의 연속이군요.. ㅋㅋㅋ >_<다들 좋은하루 되세요 (__)
안녕하십니까 까마굽니다 (__)넹.. 어제 밤에 테스트를 하다가 느낀건데... 윈도우 락이 필요할꺼 같네요..흠.. 특히.. Application이 지 혼자 화면에 열심히 그리고 있는 상태에서..GUI Manager가 창을 이동해 버리니까.. 문제가 심각해지네요.. 잔상이 이전자리에남는것이.. 으흣.. 윈도우가 그려지는 상태에서는 이동이나, 기타 다른 행동을 하지 못하게 해줘야겠습니다.. 쿠...쿨럭..;;;여튼 또 일케 되면.. 락을 어케 하는게 깔끔하게 하는건지가..또 문제가 되는데.. 일단.. 지금은 락이 없으면... 큰일나겠다는 생각 밖에는...아아.. 소스도 정리해야 하는데.. 잦은 출장에.. 별로 시간도 안나고...시간나면.. 또 새로운거 테스트한다고, 기존에 대강해놨던 소스는 손도 안대고...으읏.. 병인가 보군요.. 언제나 새로운걸 추구하는 몹쓸병..음하하핫 >_<여튼.. 계속 느끼는 건데.. 홈피가 생기니까 좋습니다... ^0^/~이런 이야기를 제 홈피가 아니면 어디다 적겠습니까.. 크하하핫 >_<아... 어제 오늘 너무 머리를 썼더니.. 목이 뻣뻣하군요..좀 쉬어야 겠음..다들... 좋은하루 되세요 (__)
안녕하십니까 까마굽니다.. (__)제가 어제하면서 느낀건데요..  커널 구조체의 동기화는 세머포어를 쓰는거 보다..인터럽터를 Disable해서 빨리 처리하고 나가는게 더 좋은거 같네요..시리얼에서 입력을 받는 Queue의 동기화를 위해서 세머포어를 사용했었습니다..원래는 cli sti를 이용한 동기화를 사용했는데요..처음에는 별 탈없는듯 보였지만...이게 고속으로 시리얼에서 recv가 되니까.. 확실히 속도 차이가 나네요..특히.. 이 Queue를 다른 스레드가 역시 접근하는데, 이렇게 되니..세머포어인 경우, 어느쪽이 lock()을 올리고 switching되어버리는 경우,다른 스레드는 lock() 했는데, 당근 다른놈이 lock() 해놨으니 대기..다시 switching 되서 하던거 마저 하고 unlock() 머 이런식으로 불필요한 태스크 전환( 왜?? 전환해도 Queue를 사용할수 없기 때문에 또 자야됨.. ㅡ_ㅡ;; )이 계속 일어나서 오히려 더 느린 결과를 초래하는군요..그래서 생각인데, 커널 구조체는 cli, sti를 이용해서 동기화 하는게 오히려 더 나을듯 합니다. Semaphore를 쓰는건.. 그 자원 외의 다른 자원을 사용하는 놈들은 그대로 수행가능하게 할려고 쓴다고 생각하는데, 커널 구조체는 그 자체가 워낙 여러군데서 사용되는중요한 것들이라.. semaphore를 쓰는건 무의미 하다고 생각되네요..다른 분들 생각은 어떤가요??아닌가요??그럼 좋은하루 되세요 (__)
안녕하십니까 까마굽니다 (__)으읏.. 오늘 파이프에 세부적 옵션까지 코딩하고.. fcntl 함수를 추가해서nonblock 모드를 사용할 수 있게 하는 옵션도 추가하고 해서 대강 GUI console을구현했습니다. 흐음.. 테스트를 조금 해본결과 별다른 이상이 없다는 결론이 나와서 약간은 흐믓한데, 문제는 제가 만든 application이.. System call을 이용하지않고 Direct로 I/O를 해버리는 소스가 있더군요..하.. 참.. 황당해서.. 워낙 control-c/v에 열중하다보니.. 철저하게 system call을이용해야 한다는 생각을 못하고 혼자 신나서 열심히 복사/붙이기를 했더니만..이런 또 황당한 사태가 발생하는군요.. 쩝쩝.. 어의 없습니다 그려..특히 kkamagui editor가 유별나게 많은데.. ㅡ_ㅡ;;; 이걸 어째한다 생각중입니다..커널에 System call을 추가하면 되지만.. 아아.. 귀찮아서.. ㅡ_ㅠ..크윽 또 걍 땜빵을 해버릴까나 일케 생각도 하고 있는데..오늘은 왠지 더이상 코딩하기가 싫군요.. 이러다 갑자기 또 미친듯이 달려들겠지만..일단.. 지금은 별로 할 마음이 없습니다 크햐햐햐햣 >_<지금 이제 stdin, stdout, stderr쪽을 redirection 하는 걸 테스트 하고 있는데요,물론.. 대상은 pipe로 하고 있는데.. 흐음 재밌군요.. 내가 만들고 내가 감동하는.. 이상한 ㅡ0ㅡa...이 재미에 계속 삽질을 하고 있긴한데.. 으흣.. 언제까지 할지..머 도중에 더 잼난게 나오면 그거한다고 이것도 손 때는 날이 오겠지용..그때까진 열심히 할 생각입니다.. 엇.. 적다보니 내용이 조금 이상하게 됬네..여튼 홧팅입니다( 엉성한 마무리.. ㅡ_ㅡ;;;;;; )그럼 이만.. (__)

http://kkamagui.codesum.org/screenshot.html

안녕하십니까 까마굽니다 (__)으읏.. 요즘 평일에는 시간이 별로 없는지라.. 주말에 몰아서 작업을 하고 있는데,감기 때문에 이일도 별로 쉽지는 않군요.. ㅡ_ㅠ...오늘 새벽까지해서 일단 새로 구현된 Pipe와 Dup 함수를 테스트 했습니다..머 물론 테스트는 KKAMA OS안의 Application으로 테스트 했구요..저번에 한번 언급했듯, stdin/out/err를 pipe로 맵핑해서 GUI Console이 화면에그려주고, 내부의 스래드가 shell을 돌리는 그런 구조의 Application입니다..아직 pipe는 옵션 쪽이랑, 파이프가 닫혔을때 경우에따른 처리가 조금 미흡하다는거 말고는 크게 이상이 없어보이는군요..아.. 졸음 코딩땜시롱.. 낼 다시 보면 어케 생각될지 모르겠는데..일단 요래놓고.. 자야겠습니다 ㅋㅋㅋ다들 좋은밤 되세요.. (__)
안녕하십니까 까마굽니다 (__)오늘 드디어 File System 계층 수정을 끝냈습니다. 흐음.. 머 상당히 헷갈리는부분도 없잖아있었는데요, 돌려보니 잘 되는군요..허.. 참.. 신기 신기.. @0@/~그리고 내친김에 DUP를 구현해서 실행해 테스트 해 보았는데, 이것도 나름대로잘 동작하네요.. 왠지 약간 불안하기도 한것이.. ㅡ_ㅡ;;;여튼 이제 Fork() 시에 그대로 파일을 Open 해서 넘겨주는거랑.. Pipe를 구현하는것만 남았네요.. 쩝쩝.. Pipe를 구현하는건 아직 좀더 생각을해봐야 겠지만.. 여튼 대략 가닥은 잡았습니다..일단  File System 구조에 대한 정보는 TIP에 남기도록 해야 겠군요..으흣..그럼 다들 좋은하루 되세요 (__)

안녕하십니까 까마굽니다 (__)

흐음.. 며칠을 고민한 결과..

File System에대한 구현을 약간 수정해야 한다고 결론을 지었습니다.

넹.. 지금 있는 구조로는 앞으로 구현해야할 dup나 fork시 file offset이

공유되어야 하는 그런 문제는 해결하기 힘들기 때문이죠..

이번에 정리 하면서 PIPE도 같이 할 생각입니다만..

잘 될지는 모르겠군요..

그럼 다들 좋은하루 되세요 (__)

+ Recent posts