zoukankan      html  css  js  c++  java
  • 操作系统内核

    如果说操作系统是一辆车,那么操作系统内核就是发动机。操作系统内核是操作系统最核心的部分,负责调度cpu资源,管理进程和内存等。用户应用程序不能直接操作硬件,而是需要通过内核这个中间层,由内核真正的操纵硬件资源(硬件驱动程序也属于内核当中)。

    操作系统内核的体系结构:

    Linux中每一个进程都依赖一个父进程,内核启动程序init程序作为第一个进程,该进程在系统初始化的时候再进一步创建其他进程(fork, 创建当前进程的副本,只有pid不同,内存也将被复制;exec,将一个新程序加入到当前进程的内存并执行)

    pstree可以看到进程的层次结构:

    在Linux中使用clone方法创建线程,工作方式类似于fork,但是启用了精确的检查,以确认哪些资源和父进程共享,哪些资源为线程自己创建。

    Linux提供了命名空间(namespace)技术,可以将不同进程进行分组,不同的组可以互相隔离(环境隔离),每个组中都有一个唯一的init进程(父进程),该技术让虚拟化技术得以发展。但是仅仅环境隔离还不够,因为进程使用CPU、内存、磁盘等资源还是可以随心所欲的,所以Linux内核又提供了CGroup技术,使得计算资源得以隔离,即A组中的进程只能使用分配给A的cpu、内存、磁盘等,而不能去干涉B组中的资源。虚拟机由此诞生。

    进程间的相互通信是通过信号(Signal)来实现的,信号用于将系统事件报告给进程。例如当用户按下Ctrl+C时,实际上是发送了一个SIGINT中断信号,用来终止当前执行的进程。Linux中大约有20多种不同的信号。

    当用户在键盘上敲入一个字符或者点击鼠标的时候,会产生中断(不同事件会有不同的标识,并由中断向量表来选择由哪个中断处理程序处理),当一个中断信号到达时,CPU必须停止它当前正在做的事情,保留上下文,并调用中断处理程序(内核控制路径,并不是进程)将中断尽可能快的处理完(关键而紧急的部分立即执行,其他的部分内核随后会执行,例如I/O设备(比如网卡)发出的所有中断请求都是可屏蔽中断,cpu在稍后会一起执行)。同步中断(又叫异常,只有在CPU执行完当前指令后才会发出中断,又分为故障(缺页异常),陷阱,异常终止,编程异常)和异步中断(中断,由其他硬件设备根据CPU时钟信号随机产生)统称为中断信号。

    内核线程(又叫守护进程)是直接由内核本身启动的进程,只运行在内核态,只能使用3~4G的虚拟地址空间。内核线程与用户进程并行地执行,实现内存页置换,监控资源等操作。

    读写自旋锁:rwlock_t结构,允许多个内核控制路径并发的读,但是如果有一个内核控制路径想修改结构,则需要先获取读写自旋锁的写锁。

  • 相关阅读:
    为图片指定区域添加链接
    数值取值范围问题
    【leetcode】柱状图中最大的矩形(第二遍)
    【leetcode 33】搜索旋转排序数组(第二遍)
    【Educational Codeforces Round 81 (Rated for Div. 2) C】Obtain The String
    【Educational Codeforces Round 81 (Rated for Div. 2) B】Infinite Prefixes
    【Educational Codeforces Round 81 (Rated for Div. 2) A】Display The Number
    【Codeforces 716B】Complete the Word
    一个简陋的留言板
    HTML,CSS,JavaScript,AJAX,JSP,Servlet,JDBC,Structs,Spring,Hibernate,Xml等概念
  • 原文地址:https://www.cnblogs.com/james111/p/7246802.html
Copyright © 2011-2022 走看看