能力值:
( LV2,RANK:10 )
|
-
-
2 楼
还有,夸进程读写是如何实现的?共享内存?
|
能力值:
( LV8,RANK:130 )
|
-
-
3 楼
去看《Windows Internals》吧,或者看《Windows内核原理与实现》也行,你这些问题不是几句话讲的清楚的。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
1.进程,调度是在哪里实现的?驱动么?驱动实现的是什么功能?向上提供接口?
答:进程调度在操作系统的内核中实现,驱动是为了扩展内核功能才引出的,通过提供操作系统的驱动开发接口实现,原因是任何一个通用的操作系统都不能囊括存在的所有设备,因此要通过驱动来适配。此时操作系统就对驱动可以实现的功能进行了限定。相对shell,驱动程序属于内核的一部分,按照操作系统的要求为之提供服务,操作系统再为用户的应用程序提供服务。
2.同一台电脑不同程序的系统空间是不是都是一样的?比如加载的dll都是一样?还是进程一切换就重新加载dll?
答:有各自的空间,其中分为内核区和用户区,就是常见的ring0和ring3,这两个区使用处理器的方式是不一样的,一般ring0区是独占模式,ring3通过ring0提供的功能实现处理器分片,轮着使用。两个区的数据交换需要拷贝,不能直接访问。加载dll是共享文件映射而已,各自的地址空间各自安排,只是因为编译器和连接器的原因,这部分内容有一定的规律。进程切换只是获得和放弃内核资源的方式,严格的说处理器切换是以线程为单位的,进程确定数据和代码空间,线程是处理器资源分配的最小单位,线程也可以有自己的独立数据,那是通过其它手段实现的。dll载入一次后就一直保留,直到进程退出或显式的freelibrary。
还有,夸进程读写是如何实现的?共享内存?
答:跨进程是没法读写的,进程间通信的方式很多,管道、信号量、共享内容等都是常见的手段,比如windows系统就提供了读写远程进程内存和创建远程线程的功能,但这需要从内核中进行支持,比如句柄复制之类的突破进程空间数据表示的局限。
|
|
|