程序员的自我修养——链接,装载与库(一)

2023-11-12

程序员的自我修养——链接,装载与库这本书看了差不多有一个多月了,这本书讲了很多计算机底层的知识,也补充了我的知识盲区。但是感觉看完以后前面有的知识有遗忘,因此就想好好的总结一下,也可以更好的理解这本书。

  • 计算机三个最重要的硬件是:中央处理器CPU,内存和I/O控制芯片。

  • 为了协调I/O设备与总线之间的速度,也为了能够让CUP能够和I/O通信,每个设备都有一个I/O控制器。

  • 计算机系统的软件体系结构的设计是分层次的,每个层次之间需要相互的通信,互相通信就需要协议,我们称其为接口。

  • 应用程序和操作系统内核通过中间的桥梁系统调用接口进行交互,系统调用是通过中断来实现的。

  • 操作系统的功能是:提供抽象的接口和控制硬件的资源。

  • 硬件驱动程序对硬件进行管理,硬件驱动程序是操作系统内核的一部分。

  • 硬盘的基本存储单位是扇区。

  • 早期的内存分配机制存在很多问题,第一,地址空间不隔离。第二,内存使用效率低。第三,程序运行的地址不确定。因此,我们把CPU分配的地址看作一种虚拟地址(虚拟地址往往比物理地址大很多),然后通过某些映射的方法,将这个虚拟地址映射到物理地址,这样就可以解决物理内存地址不足的问题。

  • 地址空间分为两种:虚拟地址空间和物理地址空间。物理地址空间是实际存在的地址空间。虚拟地址空间是指虚拟的,人们想象出来的地址空间,其实它并不存在,每个进程都有自己独立的虚拟地址空间,而且每个进程只能访问自己的地址空间。

  • 我们可以使用分段的方法,把程序所需要的虚拟地址空间的大小映射到物理地址空间。分段的方法是将虚拟地址空间进行分段(以程序为单位),然后通过映射函数一一映射到物理地址空间。分段的方法内存的使用效率较低。会产生大量的外部碎片。

  • 分页的基本方法是把虚拟地址空间等分成固定的页,把常用的数据和代码页装载到内存中,不常用的代码和数据保存到磁盘里,需要时从磁盘中取出即可。我们把虚拟空间中的页叫虚拟页,把物理空间的页叫做物理页。每个页我们可以设置其属性。

  • 线程有时被称为轻量级进程,是程序执行流的最小单元,线程由线程ID,指令指针(程序计数器),寄存器集合和堆栈组成。线程可以共享进程的内存空间。线程可以访问进程内存里面的所有数据。每个线程都有自己私有的内存空间(包括栈,线程局部存储和寄存器)。

  • 通过对CPU切换对线程进行调度。

  • 线程至少包括三种状态:运行,就绪,等待。当运行态的线程的时间片使用完后,该线程会进入到就绪态。

  • 线程调度大都都有优先级调度和轮转法的思想。每个线程都拥有各自的优先级,具有高优先级的线程会更早的执行。

  • 频繁等待的线程成为I/O密集型线程。很少等待的线程称为CPU密集型线程。

  • 饿死是指线程的优先级相对于其他线程较低,以至于长时间无法被执行,因此导致了该线程进入饿死状态。

  • 线程的优先级的改变有三种方式:用户指定优先级,根据进入等待状态的频繁程度提升或降低优先级,长时间得不到执行而提升优先级(饿死状态)。

  • 抢占(存在于可以抢占的线程中):线程在用尽时间片之后会被强制的剖夺继续执行的权力,进入就绪状态,这个过程叫做抢占。

  • 不可抢占的线程,线程主动放弃执行存在两种情况:第一,线程试图等待某事件。第二,线程主动放弃时间片。

  • 协程是用户态的轻量级的线程。

  • 写时复制:指的是两个任务可以同时自由的读取内存,但任意一个任务对内存进行修改时,内存就会复制一份提供给修改方使用,以免影响到其他的任务使用。

  • 同步:指在一个线程读取内存时,其他线程不得对这个内存进行读取。

  • 同步的最常见的方法是使用锁。下面就让我们介绍一下实现同步的一些方法:

  1. 二元信号量是一种最简单的锁,它有两种状态:占用和非占用。它适合只能有一个线程独占访问的资源。当一个线程读取内存时,二元信号量处于占有状态,当这个线程读取完内存时,由另一个线程释放这个二元信号量,以便这个信号量使用。

  2. 信号量是对二元信号量的一种扩展,它允许多个线程对内存进行访问。

  3. 互斥量和二元信号量很类似,当一个线程获得互斥量对内存数据进行限制,并读取完内存数据后,必须由这个线程对互斥量进行释放。

  4. 临界区是比互斥量是比更加严格的同步手段。当一个线程创建一个临界区时(也就是该线程获得临界区的锁时),该线程就会进入临界区。临界区的使用范围,只限于本线程。

  5. 读写锁致力于一种更加特定的场合的同步。对于读取频繁,而写入很少时,使用其他锁,效率会比较低,读写锁可以避免这个问题。

  6. 条件变量作为一种同步的手段,作用类似于一个栅栏。使用条件变量可以让许多线程一起等待某个事件,当事件发生时,所有的线程可以一起恢复执行。

  • 线程的并发(多个任务同时执行,cup对任务进行切换)是由多处理器或操作系统调度来实现的。

  • 用户使用的是用户级的线程,用户级的线程与内核级的线程并不是一一对应的。

  • 用户态多线程的实现方法: 一对一模型(一般使用API和系统调用的线程),多对一模型,多对多模型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

程序员的自我修养——链接,装载与库(一) 的相关文章

  • mysql 存储过程参考 虽然不建议用存储过程,一个例子 用于自己参考

    BEGIN DECLARE done INT DECLARE v companyName VARCHAR 100 DECLARE v phone VARCHAR 30 DECLARE v contactName VARCHAR 30 DEC
  • 论文笔记:On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima

    2017 ICLR 0 摘要 这篇文章探究了深度学习中一个普遍存在的问题 使用大的batchsize训练网络会导致网络的泛化性能下降 Generalization Gap 大的batchsize训练使得目标函数倾向于收敛到sharp min
  • ubuntu18.04 安装OpenBLAS

    一 通过apt get安装 sudo apt get install libopenblas dev 二 源码安装 下载OpenBLAS并安装 git clone https github com xianyi OpenBLAS git c
  • [人工智能-深度学习-37]:卷积神经网络CNN - 重构神经网络的疑惑与思考?

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 人工智能 深度学习 37 卷积神经网络CNN 重构神经网络的疑惑与思考 文火冰糖 王文兵 的博客 CSDN博客 如果你看懂我的疑惑 如果你能
  • MYSQL的server层和存储引擎层分析

    转自 微点阅读 https www weidianyuedu com SQL的全称是Structured Query Language 翻译成中国话就是结构化查询语言 这是一种声明式的语法 何为声明式 对于设计数据库的人而言 语句怎么执行就
  • 海量数据找中位数

    腾讯一面问到了 用的算法导论中的Kth算法 期望时间复杂度为O n 后来想了想 万一数据多的来根本不能一次读入内存 这个时候该如何解决呢 题目如下 只有2G内存的pc机 在一个存有10G个整数的文件 从中找到中位数 写一个算法 http b
  • python第五天作业

    作业4 判断以下哪些不能作为标识符 B D F A a B a C 12 D a 12 E false F False 作业5 输入数 判断这个数是否是质数 要求使用函数 for循环 num int input 请输入一个数 def zhi
  • 关于STM32烧录时遇到No Algorithm found for: 08000000H - 08001E13H的解决办法

    在烧录STM32F103C8T6相关例程时遇到提示 检查相关文件 均正常 但发现其默认配置为 Erase Sectors 因此 解决办法为 1 进入option for trget 小锤子 界面 2 选择Utilities界面 点击sett
  • js正则搜索img标签并替换src值

    第一种用函数更灵活 const html img src image1 jpg img src image22 jpg p Some text with no image p img src i23mage3 jpg const regex
  • 动态代理原理和设计模式详解

    一 什么是代理模式代理模式是一种设计模式 提供了对目标对象额外的访问方式 即可以通过代理访问目标对象 这样可以在不修改原目标对象的前提下 提供额外的方式进行访问 扩展目标对象的功能 通俗的说 例如你想租房 房子就是你的目标访问对象 那在中间
  • LVGL7.5版本 触摸与键盘输入(API)对接(一)

    LVGL7 5版本 触摸与键盘输入 LVGL7 5版本 触摸与键盘输入 API 对接 一 前言 一 indev输入设备的种类介绍 二 移植Touchpad与Keypad Touchpad Keypad Keypad测试示例 本篇完 LVGL
  • 有哪些值得互联网人加入的国企?

    程序员的成长之路 互联网 程序员 技术 资料共享 关注 阅读本文大概需要 5 5 分钟 今年的就业相比以往是难了一点 感受到的人 都懂 今天分享一些值得考虑的国企 毕竟优质的国企很稳定 不会像互联网一样担忧年纪大被裁员的情况发生 福利又好
  • 使用zabbix5.2监控mariadb--第七步

    困难点 zabbix5 2可用的userparameter mysql conf问题 一般不成功是因为监控脚本和数据库账号授权 01 前言 zabbix内置Mysql的监控模版 因为mariadb和Mysql两者的相关性 所以这个模版也能用
  • HFSS仿真导入到PCB

    一 从HFSS中导出DXF文件 以偶极子天线为例 先导出顶层 选择这个然后保存 然后同理 导出介质层和底层 二 导入PCB文件中 1 导入顶层 导入刚刚导出的顶层文件 然后将比例更改为mm pcb层改为Top Layer 导入之后选中 2
  • python 矩阵常用计算

    coding utf 8 import numpy as np aa np array 1 2 3 4 5 6 7 8 9 行列式 print np linalg det aa
  • mysql分割和合并字段数据

    1 以此表为例 2 分割字符串成多列展示 sql语句 select li substr li 1 2 as D盘 substr li 11 11 as jpg from sheet1 结果 3 分割完之后 可以得到想要的数据 根据数据有多少
  • 区块链医疗应用--智慧医疗系统

    区块链医疗应用 医疗现状 医疗行业利用区块链技解决个人健康数据的安全性与共享 医疗数据信息孤岛 产品溯源等 提供了更有效维护 全量备份 信息安全的分布式记账技术 为医疗数据共享带来更好思路 区块链的特性确保系统的稳定性 医疗行业的发展主要是
  • 语义分割——SegNet(四)

    简介 补充一下2015年发表的SegNet模型 它是由剑桥大学团队开发的图像分割的开源项目 该项目可以对图像中的物体所在区域进行分割 SegNet是在FCN的语义分割任务基础上 搭建encoder decoder对称结构 实现端到端的像素级

随机推荐

  • idea使用vim

    idea使用vim 安裝ideaVim插件 在idea中直接搜索插件 ideaVim 并安装 配置vim 在 home 目录下创建 ideavimrc文件 如在 windows 系统中 则在 C Users xxxx 下建 在 ideavi
  • 《等级保护二级基本要求》

    等级保护二级基本要求 通过等级保护工作发现单位信息系统存在的安全隐患和不足 进行安全整改之后 提高信息系统的信息安全防护能力 降低系统被各种攻击的风险 维护单位良好的形象 等级保护是我国关于信息安全的基本政策 国家法律法规 相关政策制度要求
  • 贝叶斯做文本分类,代码实现数据处理

    import os import time import random import jieba 处理中文 import nltk 处理英文 import sklearn from sklearn naive bayes import Mu
  • IPV6网络地址

    目录 1 IPV6地址简介 2 IPV6地址与分类 2 1 单播地址 2 2 组播 Multicast 地址 2 3 任意播 Anycast 地址 3 总结 1 IPV6地址简介 地址长度 128bit V4地址只有32bit IP标识方法
  • 【Unity3D】如何在uniyt中切换画布实现切换界面的交互操作

    我们在切换不同界面的时候 时常会用到切换场景的操作 如果在一个场景里就可以去实现切换界面的时候 若再使用切换场景来实现 会占用很大的空间 不妨在一个场景里使用切换画布的方法来实现切换界面的交互操作 1 在unity场景中添加两个画布以及文本
  • 汽车LiDAR的“先行者”——机械式LiDAR

    转自 http www mems me mems system integrator 201711 5547 html http www mems me mems system integrator 201711 5636 html 机械式
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>

    目录 一 工作环境及项目简介 二 原理图设计 1 核心板 电源电路 板对板连接器 复位电路 晶振电路 主控电路 2 底板 串口转USB电路 TF卡电路 WIFI电路 TFT屏幕 音频 板对板连接器 40Pin4 3寸屏幕 三 PCB展示 四
  • [spring处理webservice报文] 1 spring如何搭建webservice服务

    目录 1 背景 2 sping里头搭建webservice 2 1 wsapplication 2 2 futurwebservice 2 3 futurewebserviceimpl 2 4 webserviceconfig 3 soap
  • 画心形图 C#

    public static PointF Random PointF P PointF Center float R float Math Sqrt P X Center X P X Center X P Y Center Y P Y Ce
  • Redis(主从复制、哨兵模式、集群)概述及部署

    Redis主从复制 Redis主从复制的概念 主从复制 是指将一台Redis服务器的数据 复制到其他的Redis服务器 前者称为主节点 Master 后者称为从节点 Slave 数据的复制是单向的 只能由主节点到从节点 默认情况下 每台Re
  • Python练习题——阶乘累计求和

    题目来源 Python语言程序设计 中国大学MOOC 授课老师 嵩天 黄天羽 礼欣 题目描述 获得用户输入的整数n 输出 1 2 n 的值 如果输入数值为0 负数 非数字或非整数 输出提示信息 输入有误 请输入正整数 方法一 factTes
  • vue : 无法加载文件 C:\Users\jianfei\AppData\Roaming\npm\vue.ps1,因为在此系统上禁止运行脚本。...

    背景 在新电脑上配置vue环境 PS E CODE PROJ myvue vue23 P61 使用脚手架 vue test gt npm install g vue cli npm WARN deprecated source map ur
  • python——class类和方法的用法详解

    因为一直不太清楚面向对象的类和方法的编程思想 所以特地补了一下python class的知识 在这里记录和分享一下 文章目录 类和方法的概念和实例 1 python类 class 2 类的构造方法 init 3 类中方法的参数 self 4
  • Redis持久化机制

    目录 Redis的持久化 RDB Redis会在以下几种情况下对数据进行快照 AOF append only file AOF的实现 AOF的重写原理 Redis的持久化 Redis支持两种方式的持久化 一种是RDB方式 另一种是AOF a
  • 一个完整的性能测试流程

    下午逛一个测试交流群时 聊起性能测试 然后某位群成员说他们用的loadrunner做性能 当时觉得这话有点偏颇 虽然我也是一个性能测试道路上的摸索前进者 诚然 我们在进行性能测试工作的过程中 需要借助工具的辅助来帮我们完成一些工作 但loa
  • 计算机存储容量单位读法及换算B、KB、MB、GB、TB、PB、EB、ZB、YB、RB、QB

    1KB 1024B 1MB 1024KB 1024 1024B 1B byte 字节 8 bit 位 比特 1KB Kilobyte 千字节 1024 B 2 10 B 1MB Megabyte 兆字节 百万字节 简称 兆 1024 KB
  • 2023国赛数学建模B题思路代码 - 多波束测线问题

    1 赛题 B 题 多波束测线问题 单波束测深是利用声波在水中的传播特性来测量水体深度的技术 声波在均匀介质中作匀 速直线传播 在不同界面上产生反射 利用这一原理 从测量船换能器垂直向海底发射声波信 号 并记录从声波发射到信号接收的传播时间
  • C++ 中栈对象的使用总结、RAII

    背景 栈区用于存放函数的参数 局部变量 返回值等 栈区的数据由编译器自动进行分配 在作用域内有效 在超出变量作用域后 栈中数据由编译器自动释放 栈内存分配运算内置于处理器的指令集 效率高 但是分配的内存容量有限 栈对象 栈对象在创建时会自动
  • yagmail发送附件

    效果图 经测试代码 导入yagmail第三方库 import yagmail yagmail SMTP user 邮箱名 host SMTP服务器域名 yag yagmail SMTP user 284036658 qq com host
  • 程序员的自我修养——链接,装载与库(一)

    程序员的自我修养 链接 装载与库这本书看了差不多有一个多月了 这本书讲了很多计算机底层的知识 也补充了我的知识盲区 但是感觉看完以后前面有的知识有遗忘 因此就想好好的总结一下 也可以更好的理解这本书 计算机三个最重要的硬件是 中央处理器CP