【操作系统】学习操作系统知识

文章目录

  • 前言
  • 测量系统调用和上下文切换的成本
    • purify 和 valgrind
    • x=x+3 的执行过程


前言

ref:http://ges.cs.wisc.edu/~remzi/OSTEP/Chinese

零散的记录知识,看《操作系统引论》

测量系统调用和上下文切换的成本

上下文切换需要多长时间?甚至系统调用要多长时间?如果感到好
奇,有一种称为 lmbench [MS96]的工具,可以准确衡量这些事情,并提供其他一些可能相关的性能指标。
随着时间的推移,结果有了很大的提高,大致跟上了处理器的性能提高。例如,1996 年在 200-MHz P6
CPU 上运行 Linux 1.3.37,系统调用花费了大约 4μs,上下文切换时间大约为 6μs[MS96]。现代系统的性能
几乎可以提高一个数量级,在具有 2 GHz 或 3 GHz 处理器的系统上的性能可以达到亚微秒级。

使用工具:Imbench

在这个作业中,你将测量系统调用和上下文切换的成本。测量系统调用的成本相对容易。

你必须考虑的一件事是时钟的精确性和准确性。你可以使用的典型时钟是 gettimeofday()。
详细信息请阅读手册页。你会看到,gettimeofday()返回自 1970 年以来的微秒时间。然而,
这并不意味着时钟精确到微秒。测量 gettimeofday()的连续调用,以了解时钟的精确度。这
会告诉你为了获得一个好的测量结果,需要让空系统调用测试的迭代运行多少次。如果
gettimeofday()对你来说不够精确,可以考虑利用 x86 机器提供的 rdtsc 指令。

测量上下文切换的成本有点棘手。lmbench 基准测试的实现方法,是在单个 CPU 上运
行两个进程并在它们之间设置两个 UNIX 管道。管道只是 UNIX 系统中的进程可以相互通
信的许多方式之一。第一个进程向第一个管道写入数据,然后等待第二个数据的读取。由
于看到第一个进程等待从第二个管道读取的内容,OS 将第一个进程置于阻塞状态,并切换
到另一个进程,该进程从第一个管道读取数据,然后写入第二个管理。当第二个进程再次
尝试从第一个管道读取时,它会阻塞,从而继续进行通信的往返循环。通过反复测量这种
通信的成本,lmbench 可以很好地估计上下文切换的成本。你可以尝试使用管道或其他通信
机制(例如 UNIX 套接字),重新创建类似的东西。
在具有多个 CPU 的系统中,测量上下文切换成本有一点困难。在这样的系统上,你需
要确保你的上下文切换进程处于同一个处理器上。幸运的是,大多数操作系统都会提供系
统调用,让一个进程绑定到特定的处理器。例如,在 Linux 上,sched_setaffinity()调用就是
你要查找的内容。通过确保两个进程位于同一个处理器上,你就能确保在测量操作系统停
止一个进程并在同一个 CPU 上恢复另一个进程的成本。

purify 和 valgrind

如你所见,有很多方法滥用内存。由于内存出错很常见,整个工具生态圈已经开发出来,可以帮助你在代码中找到这些问题。请查看 purify [HJ92]和 valgrind [SN05],在帮助你找到与内存有关的问题的根源方面,两者都非常出色。一旦你习惯于使用这些强大的工具,就会想知道,没有它们时,你是如何活下来的。

[KR88]“The C Programming Language”Brian Kernighan and Dennis Ritchie Prentice-Hall 1988
C 之书,由 C 的开发者编写。读一遍,编一些程序,然后再读一遍,让它成为你的案头手册。
[N+07]“Exterminator: Automatically Correcting Memory Errors with High Probability”Gene Novark, Emery D.
Berger, and Benjamin G. Zorn
PLDI 2007
一篇很酷的文章,包含自动查找和纠正内存错误,以及 C 和 C ++程序中许多常见错误的概述。

x=x+3 的执行过程

计算机执行 x = x+3 的汇编过程
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/295515.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++面向对象(OOP)编程-STL详解(vector)

本文主要介绍STL六大组件,并主要介绍一些容器的使用。 目录 1 泛型编程 2 CSTL 3 STL 六大组件 4 容器 4.1 顺序性容器 4.1.1 顺序性容器的使用场景 4.2 关联式容器 4.2.1 关联式容器的使用场景 4.3 容器适配器 4.3.1 容器适配器的使用场景 5 具体容器的…

建筑模板的规格是多大的呢?

建筑模板的规格有多种,它们的尺寸可以根据不同的建筑需求和标准而有所不同。常见的建筑模板规格包括但不限于以下几种: 1. 木模板: - 常见的木模板尺寸包括915mm x 1830mm(3英尺 x 6英尺)和1220mm x 2440mm&#xff08…

linux设置线程优先级以及调度策略浅析

linux线程调度策略 Linux内核会根据线程的优先级和调度策略来分配处理器时间。线程的优先级越高,它在竞争处理器时间时就越有可能被选中执行。调度策略定义了内核在选择下一个要执行的线程时所遵循的规则。 在Linux中,有以下几种常见的调度策略&#x…

屏幕颜色吸取器

前言 屏幕颜色吸取器。 前端工程师的福音,获取全屏幕上所有位置的颜色。 运行在window上的软件 屏幕颜色吸取器 前言1 下载解压2 使用 1 下载解压 下载地址:https://download.csdn.net/download/qq_44850489/11943229 下载下来之后解压 如下图&#…

数据流图_DFD图_精简易上手

数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输人移动到输出的过程中所经受的变换。 首先给出一个数据流图样例 基本的四种图形 直角矩形:代表源点或终点,一般来说,是人,如例图的仓库管理员和采购员圆形(也可以画成圆角矩形):是处理,一般来说,是动作,是动词名词的形式…

Java开发框架和中间件面试题(4)

27.如何自定义Spring Boot Starter? 1.实现功能 2.添加Properties 3.添加AutoConfiguration 4.添加spring.factory 在META INF下创建spring.factory文件 6.install 28.为什么需要spring boot maven plugin? spring boot maven plugin 提供了一些像jar一样打包…

生物信息学R分析工具包ggkegg的详细使用方法

ggkegg介绍 ggkegg 是一个用于生物信息学研究的工具,可以用于分析和解释基因组学数据,并将其与已知的KEGG数据库进行比较。ggkegg 是从 KEGG 获取信息并使用 ggplot2 和 ggraph 进行解析、分析和可视化的工具包,结合其他使用 KEGG 进行生物功…

【常见的语法糖(详解)】

🟩 说几个常见的语法糖 🟢关于语法糖的典型解析🟢如何解语法糖?🟢糖块一、switch 支持 String 与枚举📙糖块二、泛型📝糖块三、自动装箱与拆箱🍁糖块四、方法变长参数🖥️…

测试开发体系介绍——测试体系介绍-L3

目录: 测试框架体系TDDDDTBDDATDD介绍 测试框架是什么?测试框架的价值:测试框架的收益:常见测试框架类型:TDDBDDBehaviorDrivenDevelopmentATDDAcceptanceTestDrivenDevelopmentMBTModelBasedTestingDDTDataDrivenTes…

Spring Boot + EasyUI 全屏布局(二)

一、创建一个Spring Boot EasyUI项目 Spring Boot EasyUI 创建第一个项目(一)_springboot整合easyui-CSDN博客 二、相关知识点总结 布局(layout)是有五个区域(北区 north、南区 south、东区 east、西区 west 和中区…

Kafka集群架构原理(待完善)

kafka在zookeeper数据结构 controller选举 客户端同时往zookeeper写入, 第一个写入成功(临时节点), 成为leader, 当leader挂掉, 临时节点被移除, 监听机制监听下线,重新竞争leader, 客户端也能监听最新leader leader partition自平衡 leader不均匀时, 造成某个节点压力过大, …

data数据响应式

data数据响应式 所有在实例上挂载的属性,都可以在视图中直接使用 data中的数据,是经过“数据劫持”的,是“响应式数据” 响应式:修改数据,视图会自动更新 MV原理:其中一条线的原理,data响应式的…