IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 【Linux】进程(二)Linux进程地址空间、写时拷贝 -> 正文阅读

[系统运维]【Linux】进程(二)Linux进程地址空间、写时拷贝

在这里插入图片描述

什么是地址空间?

在Linux系统下的多个进程,都会有如上的虚拟地址空间,并且是各自独立的;其并不是真实的内存(即物理内存),单个进程的虚拟地址空间中又被划分为不同的区域。

进程能够看到的只是一块虚拟的、有着不同分区的连续内存块,其能看到的地址也只是虚拟地址空间的虚拟地址,通过页表结构构建起的虚拟地址与物理地址的映射关系,实现虚拟地址到物理地址的转换,从而对物理内存进行操作。

为什么要有地址空间?

  1. 保护内存
    我们知道在C语言中有指针操作,如果没有虚拟地址空间,那么直接操作的就是物理地址,指针操作很容易误修改其他进程的数据,从而造成运行结果紊乱;如果误修改了操作系统的某些数据,甚至可能造成操作系统崩溃。
  2. 内存连续化处理
    在很多情况下,一个进程中的多个数据的存储是不连续的,访问起来不方便,也增加了异常越界的概率。操作系统通过虚拟化地址空间,将实际不连续的物理内存连续化处理了,

Linux如何管理地址空间?

管理 = 描述 + 组织。地址空间在操作系统中本质是一个数据结构struc mm_struct,包含着划分区域的信息,例如区域的起始的物理地址和结束的物理地址。struct mm_struct会保存在PCB中,操作系统只要拿到某一进程的PCB,就能得到该进程对应的内存信息。

写时拷贝

通常,父子进程代码共享,其任意一方不写入时,数据也是共享的。但由于进程的独立性,当有任意一方对其中的数据进行修改时,试图写入方需要拷贝一份待修改数据的副本,并修改页表结构的映射,因此父子进程的写入数据所占有的物理内存是不同的,而只读数据仍共享;从而父子进程各自的运行互不干扰。

这样做的好处就是节省空间和时间。父子进程代码共享,如果二者都只对数据进行读操作,那就不会涉及到相互影响,不需要在子进程创建后直接拷贝新的数据,从而节省时间;

再者,并不是所有的数据都需要被拷贝,可能只有部分的数据是会被修改的,因此在某一部分的数据被试图写入时,只拷贝这部分的数据,从而节省空间。例如父子进程共享着10M的数据,而某一进程只需要写入1M的空间,那么此时只需要拷贝1M的空间。

运行队列?等待队列?

操作系统在管理进程时,实际上是管理由多个task_struct组成的数据结构,如双向链表,因此task_struct中必然包含着彼此之间大量的连接信息,用于调度和切换等。

  1. 运行队列(runqueue)
    由多个处于R状态的进程PCB连接而成,等待被CPU调度
  2. 等待队列(waitqueue)
    由多个处于D状态的进程PCB连接而成,处于D状态的进程通常在等待外部硬件的I/O而陷入深度睡眠状态,而被放入等待队列当中;当等待的磁盘或网卡可以被读取或者写入时 会唤醒等待队列中的进程,将PCB从waitqueue转到runqueue中去执行当前进程的读写代码。
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-20 18:49:01  更:2021-11-20 18:49:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 5:41:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计