zoukankan      html  css  js  c++  java
  • 系统调用及损耗

    系统调用的根本目的是保护操作系统所维护的共享资源;

    系统调用

    程序运行的时候,本身是没有权限访问多少系统资源的。系统资源有限,如果操作系统不进行控制,那么各个程序难免会产生冲突。线程操作系统都将可能产生冲突的系统资源保护起来,阻止程序直接访问。比如文件、网络、IO、各种设备等。

    比如无论在Windows还是Linux中,程序员都不能直接去访问硬盘的某扇区上的数据,必须通过文件系统,也不能擅自修改任意文件。所有这些操作必须经过操作系统规定的方式进行。比如用fopen打开没有权限的文件就会失败。



    作者:纸简书生
    链接:https://www.jianshu.com/p/4b9c40e6b8ae
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    (1) 内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据。不管是内核空间还是用户空间,它们都处于虚拟空间中。 

    (2) Linux使用两级保护机制:0级供内核使用,3级供用户程序使用。

    https://www.cnblogs.com/feng9exe/p/8179538.html

    参考:《Understanding Unix/Linux Programming: A Guide to Theory and Practice》之2.7

    用户进程位于用户空间,内核进程位于系统空间,磁盘只能被内核直接访问。

            在运行内核代码时,CPU工作在管理员模式,这对应于一些特殊的堆栈和内存环境,必须在系统调用时切换到这个环境中。系统调用结束后,CPU要切换到用户模式,又要将堆栈和内存环境恢复到用户模式的状态,这种内存环境的切换要耗费很多时间。

            因此,系统调用所耗费的时间主要在两次环境切换上,如果用户程序中普通代码和系统调用交替出现,那么将产生很大的环境切换的开销。

    --------------------- 

    作者:jubincn 

    来源:CSDN 

    原文:https://blog.csdn.net/jubincn/article/details/6989716 

    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    单点登录
    Found conflicts between different versions of the same dependent assembly that could not be resolved
    在Visual Studio Code中使用C#以及.net core
    GitBlit中出现 error: remote unpack failed: error Missing tree
    net user
    SwitchyOmega
    What's the difference between Unicode and UTF-8?
    2>&1
    [C++基金会]位计算 游戏开发中的应用
    Broadcast Receiver注意事项
  • 原文地址:https://www.cnblogs.com/feng9exe/p/10738362.html
Copyright © 2011-2022 走看看