![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
文章平均质量分 95
Guanngxu
Keep trying
展开
-
CPU 是怎样工作的
CPU 大家应该都不会陌生,日常用的手机、电脑中都有 CPU,CPU 作为一个设备的大脑,指挥着其它各种硬件的协同工作,芯片技术也是国内一直没有突破的技术。我们先来看看怎么让电路去运算呢?比如如何让电路运算1 + 1,直接使用下面这个装置就可以了。作为一个比较好奇的人,总会想看看那个方框框里面是什么样子的,让我们慢慢解开加法器的外衣。这个电路你应该不会陌生,它需要两个开关都闭合时灯泡才会...原创 2019-04-27 21:09:37 · 1777 阅读 · 0 评论 -
并发编程
在异常控制流提过,如果逻辑控制流在时间上是重叠的,那么它们就是并发的。并发出现在计算机不同层面上,编写并发程序也是程序员必不可少的技能,面试同样必问并发相关知识。 现代操作系统提供了基于三种基本的构造并发程序的方法。分别为:进程、I/O 多路复用和线程。 基于进程的并发编程方法很简单,使用我们很熟悉的fork、exec、waitpid等函数就可以了。比如构造一个并发服务器的...原创 2019-02-23 21:17:28 · 191 阅读 · 0 评论 -
网络编程(自制服务器)
现在的网络应用随处可见,无法想象生活离开了网络会变得怎样,最常见的就是通过浏览器上网,在地址栏输入 URL 敲击回车,然后浏览器就呈现出相应的页面。虽然现在的网络应用五花八门,但是它们都是基于相同的编程模型,依赖相同的编程接口。 每个网络应用都是基于客户端-服务端编程模型的,采用这个模型,一个应用是由一个服务器进程和一个或多个客户端进程组成。由服务器管理着某种资源,通过操作这些资源...原创 2019-01-27 23:38:10 · 2115 阅读 · 1 评论 -
系统级 I/O
文件对于我们来说,貌似再普通不过了,windows 使用扩展名来区分不同的文件,我们接触了 gif、docx、pdf、mp3、mp4、exe 等等好多好多不同的文件,但是它们在磁盘中都长一个样子,对于内核而言,没有什么区别。基本概念 文件这个概念就是对 I/O设备 的抽象,一个文件就是一串 m 个字节的序列,所有的 I/O 设备(网络、磁盘、终端)都被模型化为文件,所有的输入输出...原创 2019-01-21 09:56:29 · 190 阅读 · 0 评论 -
异常控制流
异常 从给我们的处理器开始加电,到断电为止的这段时间里,取任何一个时间点,程序计数器里面都有一个值 ak,表示相应指令的 Ik,从 ak 到 ak-1 的过程叫做控制转移,最简单的情况是 ak 和 ak-1 在内存中位置相邻,但是我们的程序少不了跳转、调用、返回一类的指令,系统为了应对这种变化,使用了一种使控制流发生突变的机制,这种突变我们称之为异常控制流。 异常控制流是是很重要的...原创 2019-01-02 22:28:30 · 189 阅读 · 0 评论 -
链接器规则会引入的巨坑
首先来看一个简单的程序。下面是是两段程序,分别放在link.c和bar.c中。/* link.c */#include<stdio.h>void f(void);int x = 13;int main(){ f(); printf("x=%d\n", x); return 0;}/* bar.c */int x;void f(){ x =...原创 2018-12-09 16:48:15 · 188 阅读 · 0 评论 -
如何优化程序性能
这篇笔记主要是摘抄了具体的代码示例,从代码中体会如何优化程序的性能,《深入理解计算机系统》已经看了近三分之二了,越看越发现自己懂得太少太少了,正在题图中的绝望之谷徘徊(我自认为是这样),至少比在愚昧山峰左边的山脚徘徊要好很多。 我们的编译器已经提供了很好的优化机制,但是还有很多细节编译器优化不到,或者说没胆量去优化,因为有一些激进的优化很有可能会违背程序员的初心。// 第一种...原创 2018-12-05 22:12:21 · 1038 阅读 · 0 评论 -
为什么处理排序数组比未排序数组快
今天在群里看到一个有意思的问题——为什么处理排序数组比处理没有排序的数组要快,这个问题来源于 StackoverFlow,虽然我看到代码略微知道原因,但是模模糊糊不够清晰,搜了很多博客也讲的不够明白,所以就自己来总结了。 首先来看一下问题,下面是很简单的一段代码,随机生成一些数字,对其中的大于 128 的数字求和,记录并打印出求和所用时间。import java.util.Arr...原创 2018-11-28 19:13:25 · 235 阅读 · 0 评论 -
存储器的层次结构
存储技术 我们在买电脑时都会关注内存、处理器、硬盘等部件的性能,都想内存尽可能大,硬盘最好是固态的。 不知道你有没有遇到过自己写了大半天的文档,因为不小心突然关机了,自己辛苦忙活了几个小时的成果又得重写的情况。可是你是否想过为什么关机了就会丢失这些信息呢?为什么硬盘上的文件没有丢? 会丢的那部分信息肯定是和电有关系的,不然也不会一断电就丢信息。内存就是这样的部件,更专业一点...原创 2018-12-02 12:04:01 · 1387 阅读 · 0 评论 -
函数调用与空间分配
我们在编程序的时候,都会把某一个特定功能封装在一个函数里面,对外暴露一个接口,而隐藏了函数行为的具体实现,一个大型的复杂系统里面包含了很多这样的小函数,我们称之为过程。 过程是相对独立的小模块,系统的运行需要这些过程的紧密合作,这种合作就是函数调用。 在一个函数执行时调用别的函数,比如 P 调用 Q,需要执行一些特定的动作。传递控制,在调用 Q 之前,控制权在 P 的手里,...原创 2018-11-18 23:20:03 · 978 阅读 · 0 评论 -
机器级程序的小细节
随着技术的逐渐发展,CPU 中晶体管的数量以每年 37% 的速度递增,CPU 也从 16 位到了 32 位,现在已经到了 64 位,为了保证以前编译的程序仍然能够在最新的机器上使用,所以寄存器保留了原来的命名。 比如一个 16 位的寄存器有自己的名字,当扩展成 32 位的时候,会保留原来 16 位寄存器的名字,并给整个 32 位寄存器取一个新的名字。如同“天生我材必有用”,每个寄存...原创 2018-11-05 23:01:10 · 795 阅读 · 0 评论 -
顺序、条件、循环语句的底层解释
顺序结构数据传送指令 我们都清楚,绝大多数编译器都把汇编语言作为中间语言,把汇编语言程序变成可运行的二进制文件早就解决了,所以现在的高级语言基本上只需要把自己翻译成汇编语言就可以了。 汇编指令总共只有那么多,大多数指令都是对数据进行操作,比如常见的数据传送指令mov。不难理解,被操作数据无非有三种形式,立即数,即用来表示常数值;寄存器,此时的数据即存放在指定寄存器中的内容;内存引...原创 2018-11-11 00:48:30 · 1147 阅读 · 0 评论 -
整数的加法和乘法运算
深入理解计算机系统第二章读书笔记 在编程入门的时候可能都知道两个正数相加的结果可能为负数,还有一个更奇怪的现象就是:x < y和 x - y < 0两个表达式可能会得出不一样的结果,这些神奇的结果都和计算机整数的底层表示和运算有着密切的关系。 C 语言中有无符号数与有符号数之分,而在 Java 中只有有符号数,下面的内容还是基于 C 语言进行说明,毕竟更 C 比 J...原创 2018-10-26 22:52:18 · 1253 阅读 · 0 评论 -
信息的存储及整数表示
深入理解计算机系统(第三版)第二章前半部分读书笔记字数据大小 前面已经提到过信息=位+上下文,但是基本上的计算机都没有将位作为最小的可寻址单位,而是将字节作为了最小的可寻址单位,内存就是一个非常大的字节数组,它的的每个字节都由一个唯一的数字来标识(这个数字是不需要存的),所有可能的地址集合就是虚拟地址空间。 我们常说的 32 位、64 位指的是一台计算机的字长,用于指明指针数...原创 2018-10-23 22:35:41 · 185 阅读 · 0 评论 -
计算机系统漫游
对于程序员来说,HelloWorld 程序再熟悉不过了,下面是 C 语言写的 HelloWorld 程序。#include&amp;lt;stdio.h&amp;gt;int main(){ printf(&quot;hello, world\n&quot;); return 0;} 这段程序很简单,仅仅是在屏幕上输出hello world,对于程序员很容易阅读,但是从计算机的角度来看,也是这么简单吗...原创 2018-10-10 11:18:25 · 161 阅读 · 0 评论 -
简单理解磁盘结构
偶然看到一道笔试题,所以简单整理了一下磁盘的结构。本文主要介绍传统的磁盘结构,包括盘面、磁道、扇区、柱面、读写数据过程的概念,最后给出所遇到的笔试题。磁盘结构 传统的硬盘盘结构是像下图样子的,它有一个或多个盘片,用于存储数据,盘片多采用铝合金材料;中间有一个主轴,所有的盘片都绕着这个主轴转动,一个组合臂上面有多个磁头臂,每个磁头臂上面都有一个磁头,负责读写数据。...原创 2018-04-24 22:40:18 · 37892 阅读 · 12 评论