
寫一個OS實在太猛了o.o..
由 jotarun 發表於 January 10, 2009 12:02 AMLogo 不錯看XD
由 lancetw 發表於 January 10, 2009 01:17 PM看到CuRT讓我想到Kurt Cobain.....好像離題 XD
總之還是替 Jserv 鼓掌!!
sqlite 的 logo 也是一隻羽毛.
不過 CuRT 的比較好看
hello,jserv:一直很崇拜你,下了curt_v1运行时,为什么cpu一直占到90%以上?
我看程序也没有某一个线程死循环呀,都挂起了呀?(用你提供的run-on-connex运行)?能否给解释一下?谢谢!
真不错,可是貌似下载不了,估计又是GFW在做怪?
由 bshawk 發表於 January 17, 2009 07:29 PMjserv,another question,如果我更改了mian函数里创建的几个函数的优先级(把info_tid,stat_tid和help_tid分别改成5,8,21则会出现下面的错误,是qemu的问题吗,如果是,我应该看一些什么资料,最近我特想学习一下OS的原理.能看到你的回复,真的很感谢!
pxa2xx_clkpwr_write: CPU frequency change attempt
##################################
# Start CuRT.... #
##################################
$ ps
ID State Name
Ready idle-thread
1 Delay shell_thread
2 Running info_thread
3 Block statistics_thread
4 Block help_thread
5 Delay hello_thread
6 Delay hello2_thread
pflash_write: Unimplemented flash cmd sequence (offset 00000004, wcycle 0x0 cmd 0x0 value 0xa008c680
qemu: fatal: Bad mode 0
R00=00000001 R01=a008c6a8 R02=0000000a R03=00000000
R04=a008c6a0 R05=a008c6b8 R06=00000000 R07=00000000
R08=a008c6b0 R09=a008c6c8 R10=00000000 R11=00000000
R12=a008c6c0 R13=a008c6d8 R14=a008c6d8 R15=00000000
PSR=000000d3 ---- A svc32
s00=00000000( 0) s01=00000000( 0) d00=0000000000000000( 0)
s02=00000000( 0) s03=00000000( 0) d01=0000000000000000( 0)
s04=00000000( 0) s05=00000000( 0) d02=0000000000000000( 0)
s06=00000000( 0) s07=00000000( 0) d03=0000000000000000( 0)
s08=00000000( 0) s09=00000000( 0) d04=0000000000000000( 0)
s10=00000000( 0) s11=00000000( 0) d05=0000000000000000( 0)
s12=00000000( 0) s13=00000000( 0) d06=0000000000000000( 0)
s14=00000000( 0) s15=00000000( 0) d07=0000000000000000( 0)
s16=00000000( 0) s17=00000000( 0) d08=0000000000000000( 0)
s18=00000000( 0) s19=00000000( 0) d09=0000000000000000( 0)
s20=00000000( 0) s21=00000000( 0) d10=0000000000000000( 0)
s22=00000000( 0) s23=00000000( 0) d11=0000000000000000( 0)
s24=00000000( 0) s25=00000000( 0) d12=0000000000000000( 0)
s26=00000000( 0) s27=00000000( 0) d13=0000000000000000( 0)
s28=00000000( 0) s29=00000000( 0) d14=0000000000000000( 0)
s30=00000000( 0) s31=00000000( 0) d15=0000000000000000( 0)
FPSCR: 00000000
@bshawk
不是因為 GFW,而是網站暫停服務,可改用以下位址取得:
http://people.debian.org.tw/~jserv/kernel/curt-src-v1.tar.bz2
造成您的不便,請見諒
由 jserv 發表於 January 17, 2009 08:18 PMjserv,今天白天没时间看代码,晚上回来研究了一下,按照你说的我改了一下,还是会出现同样的错误,下面是我的分析过程,请你指点一下:
main函数创建几个线程之后,这几个线程都在各自优先级的ready队列里,当运行到start_curt函数时,系统调度一次,shell线程首先取得运行权,他首先把优先级为1的三个线程从ready队列里删除,放到block队列里,然后等待外部命令,当我输入ps指令时,shell线程执行thread_resume(info_tid),把info_tid线程从block对列里删除,放到ready队列里,然后shell线程运行thread_delay(1),就把自己放到delay队列里,系统重新调度,这时ready对列里只有info_tid,所以info_tid取得运行权,开始运行,就开始打印thread_table里的线程状态,然后它把自己挂起放到block队列里,系统重新调度,这时shell线程的thread_delay(1),应该有timer来完成调度重新取得运行权。
就算我把线程的优先级改掉调度方法也是这样的,也不应该出错.我的分析过程是否有问题?感谢你的指点:)
CuRT 小的很適合教學用。我打算把它放到下學期的 embedded system design 課程中。下面是針對它的教材內容,有錯誤的話請指教。
http://sites.google.com/site/embedded2009/introduction-to-curt-v1
由 wycc 發表於 January 25, 2009 09:29 AMjserv兄,稍微跑過CuRT之後發現他非常有趣,有想要將他移植到x86或是pxa270上面執行看看的衝動,也方便作為教學範例,不知道是否有這個可能性?還是CuRT絕大部分程式碼only for arm,在移植上有困難度,謝謝指教。
由 koukai 發表於 February 4, 2009 04:36 PM@koukai,
移植到 PXA27x 的話,應該只需要調整 arch/mach-pxa 的部份 SoC 硬體描述,其他應該都照舊即可。要移植到 x86 的話,要下的功夫稍微多一些
Dear jserv:
感謝您分享您的心血結晶.小弟在拜讀之後..有許多的地方不解.特來請教...
1. /app/sheel/main.c
中的 shell thread 中為何要獨留 hello_thread為Ready?
其意義何在?
2. /app/sheel/main.c
依架構來看,stat_curt 中會建立一個idle_thread ..並設為 Ready 狀態
若無其他 thread Ready 時,將由 idle_thread 動作.
亦即, 若將shell thread透過 thread_suspend(current_thread->tid);
交出控制權之後, 控制權應交回Idle ... 但為何會遭強之中斷, 回到作業系統的命令列下?
但使用thread_delay();則無問題...?
Why ?
CuRT 的 preemptive 似乎有些問題,只要將 shell_thread 的 priority 改成 4 就可以看到了。這樣改之後,所有的程式就無法執行了。其原因是 shell 的 context 在 preemptive(call scheduler from interrupt) 時沒有放正確。所以所有在 stack 上的變數都錯掉了。
這似似乎是 context_switch_in_interrupt 的問題,我還在看。
由 wycc 發表於 March 29, 2009 09:06 AMvoid insert_before_list(list_node_t *after, list_node_t *pnode)
{
pnode->prev = after;
pnode->next = after->next;
after->next->prev = pnode;
after->next = pnode;
}
这个函数的实现应该是pnode插入到after的后面,但别的地方很多如: sem_pend()里调用此函数的用意好像是插到after的前面?这个函数名为什么这么取?难道你的意思是把after插入到pnode的前面?
由 cherry 發表於 May 28, 2009 08:13 PMJserv 大大
不好意思請教一個問題...
我在XP的環境下,使用qemu-system-arm 試著去模擬curt。
可是一直有以下訊息出現:
qemu-0.10.6-windows>qemu-
system-arm.exe -M connex -pflash flash-image_xp.img -serial COM1
qemu: fatal: Trying to execute code outside RAM or ROM at 0x01000000
R00=00000000 R01=00000000 R02=00000000 R03=00000000
R04=00000000 R05=00000000 R06=00000000 R07=00000000
R08=00000000 R09=00000000 R10=00000000 R11=00000000
R12=00000000 R13=00000000 R14=00000000 R15=01000000
PSR=400001d3 -Z-- A svc32
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
請問一下Jserv大大有碰過類似的問題嗎?
感謝...