操作系统
文章平均质量分 72
wuguinianjing
这个作者很懒,什么都没留下…
展开
-
链接----桩打桩
桩打桩代理模式真是无处不在,谁想,运行时动态链接也是,哈哈,当然也是看了腾讯的libco,协程库,再来研究研究其运行时动态链接目标**目标:**截获来自共享库的调用,以及出于某种原因截获它们后做一些事情,我们通常想要做的是截获一个共享库的函数调用,你可以追踪对某个特殊库函数的调用次数,验证和追踪它的输入和输出,或者甚至把它替换成一个完全不同的实现。也许是记录一些统计数据或做一些错误检测,libco协程里的也很有意思,将系统调用截获,然后按照预期调用实际的函数。基本思想给定一个需要打桩的目标函原创 2021-04-18 17:43:40 · 337 阅读 · 0 评论 -
编译的相关环境变量
编译的相关环境变量PS:此处的编译指的是完整的编译链接过程。LD_LIBRARY_PATH改变共享库查找路径最简单的方法就是使用LD_LIBRARY环境变量,这个方法可以临时改变某个应用程序的共享路径查找路径,而不会影响系统中的其他程序。动态库的查找过程/ lib 和/usr/lib是一些很常用的、成熟的,一般系统本身所需要的库;/usr/local/lib是非系统所需的第三方程序的共享库基于Glibc的操作系统,如所有的LINUX系统,动态链接的ELF可执行程序在启动时同时,还好启动原创 2021-04-17 18:03:42 · 223 阅读 · 0 评论 -
Windows环境变量生效问题
1.编辑/修改 环境变量2.进入cmd,输入set path=test3.退出这个cmd窗口就生效了。验证方法:可以在第一次进入cmd 的时候echo %path%然后set path=test退出后,再进入cmd,再echo%path%转载:https://blog.csdn.net/qq1319713925/article/details/85298948...转载 2021-04-17 17:57:29 · 1149 阅读 · 0 评论 -
链接的相关知识
链接链接的任务链接的两个基本任务符号解析一个程序会定义和引用符号,汇编器(as)会将符号定义存储在目标文件中(形成符号表),每个符号对应一个结构数组,包含了该有关该符号的信息。而符号解析就是在链接器链接过程中,链接器将每个符号引用与一个符号定义相关联(此时,链接器必须决定将其中的某个定义用于所有后续引用),一旦链接器和一个独一无二的的目标建立联系,每个引用都会有一个唯一的符号定义,所以就存在一种情况,多个模块中存在多个符号定义,就有相应的强弱符号规则(如果只有单个模块,编译器当然能确定出来,但原创 2021-04-17 17:29:50 · 599 阅读 · 0 评论 -
第一章 温故而知新
1.2 万变不离其宗(计算机的核心)三个部件最为关键,它们分别是中央处理器CPU、内存和I/O控制芯片总线的演化史(CPU、内存、I/O的频率不同导致)SMP与多核 (SMP对称多处理器)理论上讲,增加CPU的数量就可以提高运算速度,并且理想情况下,速度的提高与CPU 的数量成正比。但实际上并非如此,因为我们的程序并不都能分解成若干个完全不相干的子问题。就比如一个女人可以花10个月生出一个孩子,10个女人并不能在一个月就生出一个孩子一样。当然很多时候多处理器是非常有用的,最常见的情况就是在大原创 2021-01-08 16:46:21 · 143 阅读 · 0 评论 -
虚拟内存
在任意时刻,虚拟页面的集合都分为三个不相交的子集:1.未分配的:VM系统还未分配(或者创建)的页。未分配的块没有任何数据和它们相关联,因此也就不占用任何磁盘空间。2.缓存的:当前已缓存在物理内存中的已分配页。3.未缓存的:未缓存在物理内存中的已分配页。tip:这是通过页表来实现的。每个PTE有一个有效位和一个n位地址字段构成的的。有效位表明了该虚拟页当前是否被缓存在DRAM中。如果设置了有效位,那么地址字段就表示 DRAM中相应的物理页的起始位置,这个物理页中缓存了该虚拟页。如果没有设置有效位,那原创 2020-12-13 12:34:27 · 1135 阅读 · 0 评论 -
文件读取和磁盘的同步写和延迟写
原创 2020-12-12 23:26:34 · 440 阅读 · 0 评论 -
缓冲区
所谓的函数不带缓冲和带缓冲:首先要明白不带缓冲的概念:所谓不带缓冲,并不是指内核不提供缓冲,而是只单纯的系统调用,不是函数库的调用。系统内核对磁盘的读写都会提供一个块缓冲,当用write函数对其写数据时,直接调用系统调用,将数据写入到块缓冲进行排队,当块缓冲达到一定的量时,才会把数据写入磁盘。因此所谓的不带缓冲的I/O是指进程不提供缓冲功能。每调用一次write或read函数,直接系统调用。而带缓冲的I/O是指进程对输入输出流进行了改进,提供了一个流缓冲,当用fwrite函数网磁盘写数据时,先把数据写原创 2020-12-11 17:50:35 · 151 阅读 · 0 评论 -
操作系统内存分层
在学习编程语言时,我们仅仅把内存当做一个字节数组(可以用地址下标来访问的一个大的字节数组),但实际上存储系统是一个非常复杂的设备层次结构,它提供了一个抽象,将内存结构抽象成了一个大的线性数组,我们可以体会到多种存储设备之间属性的美妙融合(缓存),以及程序的局部性属性在其中起到的作用。存储技术与趋势(了解各个存储设备的性能和运行速度)随机访问存储器(RAM),也就是当前的内存,它一般都是被打包成芯片,然后将这样很多个芯片组合就形成了主存,其最基本存储单元为bit。而RAM又可以分为两种,一种是SRAM,原创 2020-11-16 12:28:46 · 388 阅读 · 0 评论 -
内存分层体系
计算机体系结构/内存分层体系(CPU访问的指令或数据所处的位置)1.寄存器----位于CPU芯片内部,速度快,容量很小,OS无法直接管理2.cache----位于CPU芯片内部,速度快,容量很小,OS无法直接管理3.主存(物理内存) 放置OS要运行的代码,容量大,速度相对cache慢–物理地址空间4.硬盘—物理地址空间运行的程序看到的是逻辑空间,需要对应到物理地址空间ps:内存也有主频,且内存主频越高,与CPU进行交流的速度越快。硬盘有读写速度,读写速度越快,进行页错误相应越快,即提高了原创 2020-11-14 10:55:39 · 955 阅读 · 0 评论 -
内存的访问大小
WIN32下,正常情况下内存是4G,那若是我的内存大小是16G,而WIN32的指针只有4字节,那如何利用其它的内存资源呢?CPU 有两种状态:1.保护模式保护模式下,CPU只能处理32位的地址线,即能访问的内存大小为4G2.实模式实模式下CPU有...原创 2020-11-13 01:23:24 · 123 阅读 · 0 评论 -
CPU的并行执行
1 从执行程序角度基本的思想是,一个程序,计算机会读入一条指令,然后指向这条指令,同时读取另一条指令,然后执行那条指令,这实际上和正在执行的程序无关(程序可以分解为多条基础指令)。CPU提供了这个庞大的硬件基础设施,使程序运行速度比一次只执行一条指令快,即它采用了一种称为超标量乱序执行的技术,你可以认为你的程序是一个顺序执行的执行序列,而CPU需要尽可能读取多的指令序列,然后CPU会把读入的指令拆开,发现有的指令之间不是相互依赖的,所以我可以开始执行程序后面的代码,而不是当前的代码,因为它们彼此独立,这原创 2020-11-13 01:08:22 · 3226 阅读 · 0 评论 -
火车售票系统
//有缺陷的售票系统#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<pthread.h>#include<assert.h>//#pragma comment(lib, "pthreadVC2.lib")int tickt = 100;void * route(void * arg){ char *id原创 2020-11-12 17:56:41 · 71 阅读 · 0 评论 -
linux线程
1 线程的概念:进程内部的一条执行序列(执行流,有序指令的集合),一个进程可以包含多条线程,至少有一条线程,就是main方法所代表的这条执行流- -主线程。进程中的线程仅仅是有一个独自的栈区空间(区别于栈帧)(包含了线程执行的数据)线程管理的提出前,OS一直以进程作为独立运行的基本单位为什么使用线程?(性能问题) 提出一种新的实体,线程1.满足实体之间可以并发的执行(与进程类似)2.实体之间共享相同的地址空间和相同的资源(与进程不同,进程的地址空间相对是独立的,若A进程要访问B进程的地址空间需原创 2020-11-07 01:20:56 · 231 阅读 · 0 评论 -
C++11并发与多线程
1.1 并发两个或者更多的任务(独立的活动)同时发生(进行):一个程序同时执行多个独立的任务;以往计算机,单核cpu(中央处理器):某一个时刻只能执行一个任务,由操作系统调度,每秒钟进行多次所谓的“任务切换”。并发的假象(不是真正的并发),切换(上下文切换)时要保存变量的状态、执行进度等,存在时间开销;随着硬件发展,出现了多处理器计算机:用于服务器和高性能计算领域。台式机:在一块芯片上有多核(一个CPU内有多个运算核心,对于操作系统来说,每个核心都是作为单独的CPU对待的):双核,4核,8核,10核(原创 2020-11-02 18:47:54 · 198 阅读 · 0 评论