[請益] user/kernel level

作者: zelkova (*〞︶〝*)   2014-10-07 21:51:35
各位前輩好
最近面試的時候 遇到一位面試官問了一個問題
類似這樣 "你這支程式是user level還是kernel level?"
以前修OS大概還能區分這兩個名詞的差異
但是我發現我都沒去思考怎麼區分程式是屬於哪一個@@
請問有什麼關係可以判斷程式是屬於user/kernel level呢? 謝謝
作者: Ting1024 (無)   2014-10-07 21:59:00
OS, Firmware 屬於kernel, 其他歸user。
作者: zelkova (*〞︶〝*)   2014-10-07 22:19:00
請問判斷方式是看程式放在哪個memory space嗎?
作者: loveflames (咕啾咕啾魔法陣)   2014-10-07 23:13:00
kernel:ring 0,高位址 user:ring 3,低位址韌體 OS driver是kernel一般的debugger只能看見user space
作者: hst326   2014-10-07 23:44:00
不知道的一定是user lv, 寫kernel的不會問這問題了
作者: zelkova (*〞︶〝*)   2014-10-08 00:20:00
我說明一下困惑我的是什麼地方好了我之前寫的是library(xxx.so) 它會被燒成firmwarexxx.so會被放到rootfs 開機的時候會被叫起來
作者: shortoneal (不告訴你咧)   2014-10-08 00:33:00
firmware這個稱呼現在已經不專屬於kernel了...現在很多嵌入式系統整包image都有人叫他是fw
作者: zelkova (*〞︶〝*)   2014-10-08 00:35:00
感覺xxx.so好像是kernel的東西 但是放在rootfs又可以給user抽換掉 所以不清楚xxx.so定位是哪個level
作者: watz0n (watz0n)   2014-10-08 01:02:00
Google: User space memory access from the Linux kernel
作者: zelkova (*〞︶〝*)   2014-10-08 01:37:00
watz0n大大您好 IBM那篇 好像只有講paging, swapping機制不過看那篇的時候我想到so好像是透過dlopen開起來的然後我讀了這篇 http://ppt.cc/TG78看起來xxx.so應該就是user level的proccess嗎?因為dlopen會請kernel用mmap把so掛到virtual memory?
作者: askacis (ASKA)   2014-10-08 02:43:00
rootfs裡都是userspace啊應該說除了kernel module之外…kernel 就是指你的uImage/zlmage一般virtual memory是1:3這樣切但整個linux不論什麼模式都會跑在virtual memory上bootloader會把kernel帶到記憶體上,然後自己解壓縮並初始化系統硬體之後開始執行userspace的第一個程式當然在執行之前會把 rootfs給掛載起來,這個程式會幫你跑inittab有的沒的東西inittab通常會跑一些rc的script幫你把userspace但服務常式叫起來,之後這些程式想要存取硬體資源就需要透過系統呼叫如open read write ioctl mmap等切回kernel space去處理,然後再把結果送回userspace基本上你userspace跑的記憶體位置會在userspace專屬的虛擬空間,核心跟核心模組則是跑在另外專屬的虛擬空間裡也就是所謂1:3的分法一個情境就是userspace想要開啟一個uart所以使用open系統呼叫切到核心,核心幫你處理好之後再返回fd給你,之後userspace使用read來讀資料此時再切到kernel,由kernel幫你處理硬體中斷以及幫您從uart硬體fifo讀資料回記憶體上再把這個資料複製給你userspace的指標並切回userspace,就可讀到資料~
作者: RouterHsieh (醉臥美人膝,醒掌天下權)   2014-10-08 06:05:00
看你的程式是跑在kernel space還是user space啊跑在這兩者基本上要呼叫的API差蠻多的,這應該很好區分吧wwwwww
作者: zelkova (*〞︶〝*)   2014-10-08 08:30:00
感謝幾位大大的幫忙<(_ _)>
作者: KASUGAOSAKA (小步)   2014-10-08 18:44:00
感覺他在問user space/kernel space
作者: usoko (time to face reality)   2014-10-08 20:23:00
通常用的語言就會不同了 例如kernel用C/C++ user用java但還是有很多firmware不能算在kernel space
作者: iamnumbea1 (NULL)   2014-10-09 14:33:00
Kernel panic V.S segmentation fault
作者: Lordaeron (Terry)   2014-10-09 16:44:00
你的程式能直接存取kernel space 的資料,就kernel囉
作者: loveflames (咕啾咕啾魔法陣)   2014-10-09 17:39:00
只有kernel才能跑ring 0指令
作者: PICASSO1 (Pablo Picasso G.)   2014-10-09 22:09:00
askacis, good job!!....^^

Links booklink

Contact Us: admin [ a t ] ucptt.com