gpt4 book ai didi

operating-system - 内核代码与用户代码

转载 作者:行者123 更新时间:2023-12-04 19:13:23 26 4
gpt4 key购买 nike

这是书中的一段话

When executing kernel code, the system is in kernel-space execut- ing in kernel mode.When running a regular process, the system is in user-space executing in user mode.



现在什么是内核代码和用户代码。有人可以用例子解释一下吗?

假设我有一个应用程序 printf("HelloWorld")现在,在执行此应用程序时,它是用户代码还是内核代码。

我想在某个时间点,用户代码将切换到内核模式,内核代码将接管,但我想情况并非总是如此,因为我遇到了这个

For example, the open() library function does little except call the open() system call. Still other C library functions, such as strcpy(), should (one hopes) make no direct use of the kernel at all.



如果它不使用内核,那么它​​如何使一切正常工作?

有人可以以清晰的方式解释整个事情。

最佳答案

内核和用户代码之间没有太大区别,代码就是代码。只是在内核模式下执行的代码(内核代码)可以(并且确实)包含只能在内核模式下执行的指令。在用户模式下,此类指令无法执行(出于可靠性和安全原因不允许),它们通常会导致异常并因此导致进程终止。

I/O,尤其是 RAM 以外的外部设备,通常由操作系统以某种方式执行,系统调用是进入执行 I/O 的代码的入口点。所以,open()printf()使用系统调用在内核某处的 I/O 设备驱动程序中执行该代码。通用操作系统的全部意义在于向您(用户或程序员)隐藏硬件的差异,因此您无需知道或考虑访问这种网卡或那种显示器或盘。

内存访问,OTOH,大多数时候可以在没有操作系统干预的情况下发生。和 strcpy()按原样工作:读取一个字节的内存,写入一个字节的内存,哦,它是零字节,顺便说一句?如果不是就重复,如果是就停止。

我说“大部分时间”是因为经常涉及到页面转换和虚拟内存,内存访问可能会导致切换到内核中,所以内核可以从磁盘加载一些东西到内存中,让导致切换的访问指令继续.

关于operating-system - 内核代码与用户代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12874177/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com