[请益] 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开起来的然后我读了这篇 " target="_blank" rel="nofollow">
看起来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