首页 > 系统相关 >进程管理 & (系统调用 内核同步)

进程管理 & (系统调用 内核同步)

时间:2023-08-12 21:24:10浏览次数:29  
标签:同步 调用 线程 内核 寄存器 进程 拷贝

  • 进程管理
  • 在现代操作系统中,进程提供两种虚拟机制,虚拟处理器和虚拟内存
  • PCB描述一个正在执行的程序:打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存地址空间及一个或多个执行线程。
  • 在2.6以前的版本中,PCB直接放在内核栈的尾端,或者放一个pcb_info间接索引,这样做是为了在x86那样寄存器较少的硬件体系结构只要通过栈指针就能计算它的位置,从而避免了额外的寄存器记录。当然在寄存器富余的机器上可以设置一个专门的寄存器。
  • Linux的进程之间存在一个明显的继承关系,所有的进程都是PID为1的init进程的后代,进程家族树,实际上我们可以通过这种继承体系,从一个进程出发遍历任何一个进程。当然我们也可以直接遍历任务队列,因为那是一个循环链表。
  • 进程创建
  1. fork() 和 exec() 函数,fork通过拷贝当前进程创建一个子进程,字进程和父进程的唯一区别在于PID不同,exec负责读取可执行文件并将其载入地址空间开始运行。
  2. 写时拷贝(copy-on-write),内核并不复制整个地址进程空间,而是让父进程和子进程共享同一拷贝,只有在需要写入的时候,数据才会被复制,从而使进程拥有各自的拷贝。资源的复制只有在需要写入的时候才进行,在此之前,只是以只读方式共享。fork的实际开销就是复制父进程的页表以及给字进程创建的唯一的进程描述符。在一般情况下,进程创建后都会马上运行一个可执行文件,这种优化可以避免拷贝大量根本不会使用的数据(地址空间常常包含数十兆数据),这很重要。 
  3. 除了不拷贝父进程的页表项,vfork 和 fork 的功能相同。
  4. Linux实现线程的机制非常独特,Linux把所有的线程当作进程来实现,线程仅仅被视为一个与其他进程共享某些资源的进程(如地址空间)。相当高雅的做法。
  5. 内核线程相比于普通进程没有独立的地址空间,他们只在内核空间中运行。
  6. 进程终止:设置task_struct 中的标志位,删除内核定时器,释放地址空间,离开信号等待队列,递减文件描述符,给子进程寻找养父,退出。在调用exit后,尽管进程已经不能运行了,但是系统还保留着它的task_struct,父进程会回收。
  • 内核的一些数据结构如链表,队列,映射,红黑树等。

 

  •                                                                        系统调用
  • 系统调用在用户空间进程和硬件设备之间添加了一个中间层。系统调用保证了系统的稳定和安全。
  • 系统调用陷入内核,陷入内核时的参数可以由寄存器传递,返回值也通过寄存器带入用户空间。

 

 

  • 内核同步
  • 原子操作
  • 死锁
  • 自旋锁
  • 读写自旋锁
  • 信号量
  • 互斥体
  • 顺序和屏障

标签:同步,调用,线程,内核,寄存器,进程,拷贝
From: https://www.cnblogs.com/wuyun--wy/p/17283059.html

相关文章

  • import 正确调用方式
    https://stackoverflow.com/questions/54288475/pyserial-module-serial-has-no-attribute-toolsWrongwaytoimport,correctitlikebelow:fromserial.toolsimportlist_portsx=list(list_ports.comports())print(x)orimportserial.tools.list_portsplist=li......
  • Android的onAttach方法是在 Fragment 与其宿主 Activity 关联时调用的,用于建立 Fragme
    在Android中,Fragment的初始化数据通常不应该放在onAttach方法中。onAttach方法是在Fragment与其宿主Activity关联时调用的,用于建立Fragment与Activity之间的关联。这个方法主要用于执行与宿主Activity相关的操作,例如获取Activity的引用或初始化一些与Activity......
  • Linux下C语言调用libcurl库下载文件到本地
    一、项目介绍当前文章介绍如何使用C语言调用libcurl库在Linux(Ubuntu)操作系统下实现网络文件下载功能。libcurl是一个开源的跨平台网络传输库,用于在C和C++等编程语言中实现各种网络通信协议的客户端功能。它支持多种协议,包括HTTP、HTTPS、FTP、SMTP、POP3等,可以方便地进行数据的上传......
  • shell命令概述 Shell作用:命令解释器 介于操作系统内核与用户之间,负责解释命令行 获得
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操作Tab键:自动补齐反斜杠“\”:强制换行快捷键Ctrl+U:清空至行首快捷键Ctrl+K:清空至行尾快捷键Ctr......
  • shell命令概述 Shell作用:命令解释器 介于操作系统内核与用户之间,负责解释命令行 获得
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操作Tab键:自动补齐反斜杠“\”:强制换行快捷键Ctrl+U:清空至行首快捷键Ctrl+K:清空至行尾快捷键Ctr......
  • 备份小能手,还原大行动!NAS整机备份同步指南
    现在的我们越来越离不开电子设备,但当我们使用一段时间之后就可能会出现各种各样的问题影响我们的数据安全,备份数据就显得尤为重要。今天和大家分享铁威马整机备份的工具:傲梅备份。傲梅备份搭配铁威马NAS,轻松实现备份系统、文件、磁盘、分区,一旦电脑发生异常时,我们可以轻易地还原......
  • 并发并行;同步异步;阻塞非阻塞
    并发/并行;同步/异步;阻塞/非阻塞并发/并行#并行同一时刻,执行多个任务的能力,并行必须是多cpu支持#并发同一时间段内,执行多个任务的能力,所有操作系统都支持并发,单核cpu也可以并发#串行多个任务依次进行,每个任务必须等待上一个任务完成才能开始#扯出去1.python开启多......
  • 如何在32位ubuntu11.10 下编译android 4.0.1源码和goldfish内核
    一准备工作 1安装javasdk6(1)从jdk官方网站http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u29-download-513648.html下载jdk-6u29-linux-i586.bin文件。(2)执行jdk安装文件 [html] viewplaincopy1.$chmoda+xjdk-6u29-linux-i586.bin2.$jdk......
  • 调用腾讯接口发送短信
    1.导入模块pipinstalltencentcloud-sdk-python2.构建发送接口函数fromtencentcloud.commonimportcredentialfromtencentcloud.sms.v20210111importsms_client,modelsdefsend_sms(mobile,sms_code):mobile="+86{}".format(mobile)try:cr......
  • C++使用Py*调用Python3模块中类成员函数及数组参数传递
    1.首先来看Python模块的部分结构和代码。ssd_network_classify.py文件中有SSD_Network_Classify类及其识别的成员函数detect_image(),返回值是一个1维的不定长double型数组。classSSD_Network_Classify:#其他函数实现省略。。。defdetect_image(sel......