
计算机原理
文章平均质量分 88
shankusu2017
go lua c 服务器开发 shankusu2017.github.io
展开
-
操作系统基础1-功能目标及特征
以下内容转载自https://www.toutiao.com/i6881510359304405517/操作系统(Operating System,简称OS)是管理计算机硬件与软件资源的计算机程序。操作系统是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充。操作系统的功能和目标操作系统作为系统资源的管理者(资源包括软件、硬件、文件等),需要提供什么功能? 操作系统作为作为用户与计算机硬件直接的接口,要为上层的用户、应用程序提供简单易用的服务,需要提供什么功能? 操作系统..转载 2021-02-18 10:20:15 · 216 阅读 · 0 评论 -
Read文件一个字节实际会发生多大的磁盘IO?
以下内容转载自https://segmentfault.com/a/1190000037728927闪念基因2020-11-05 11:45:45作者:yanfei出处:https://segmentfault.com/a/1190000037728927先讲一个作者大约7年前我在某当时很火的一个应用分发创业公司的面试小插曲,该公司安排了一个刚工作1年多的一个同学来面我,聊到我们项目中的配置文件里写的一个开关,这位同学就跳出来说,你这个读文件啦,每个用户请求来了还得多一次的磁盘IO,性.转载 2021-02-14 22:56:03 · 243 阅读 · 0 评论 -
Redis从入门到精通,至少要看看这篇
以下内容转载自https://www.toutiao.com/i6747926805744730627/51CTO2019-10-15 15:22:21常用的 SQL 数据库的数据都是存在磁盘中的,虽然在数据库底层也做了对应的缓存来减少数据库的 IO 压力。图片来自 Pexels由于数据库的缓存一般是针对查询的内容,而且粒度也比较小,一般只有表中的数据没有发生变动的时候,数据库的缓存才会产生作用。但这并不能减少业务逻辑对数据库的增删改操作的 IO 压力,因此缓存技术应运而生,..转载 2021-02-14 18:47:28 · 152 阅读 · 0 评论 -
C4:4个函数,528行代码实现可自举的 C语言编译器
以下内容转载自https://www.toutiao.com/i6831502722718499340/引言自从华为方舟编译器横空出世,一举成为全民网红之后,一下子点燃了大家对编译器的热情。不过,对于大多数人来说,编译器仍然是遥不可及的神秘存在。今天,介绍一个国外大牛写的C语言编译器 - C4,揭开编译器的神秘面纱。原来实现一个具备基本功能的编译器,竟是如此简单!C4:4个函数实现的C语言编译器C4, C in four functions。它是一个C语言编译器项目(项目地址在文末.转载 2021-02-09 12:47:26 · 3928 阅读 · 0 评论 -
printf的归宿-数据打印到哪儿了
以下内容转载自https://www.toutiao.com/i6857334180586455565/转自《Linux阅马场》近日在一次测试Linux内核路由查找算法的过程中,发现一个printf语句竟然能将性能降低2/3。当然,使用“竟然”一词并不意味着这个问题是第一次发现,我的想法是,把它记录下来,让没有经验的同学对printf知其所以然,同时导出我对“性能攸关”的这类算法中记录日志的一个观点。声明我不会把大段的源代码贴在文章中,而只是希望能通过阐述原理把我的意思表达清楚。诚然,.转载 2021-02-04 13:01:40 · 269 阅读 · 0 评论 -
C++如何成了今天这副模样及其语法从编译器角度的合理性理解
以下内容转载自https://www.toutiao.com/i6918277762868494862/1 C++如何成了现在这个样子C++最初发布于1980年代中期,当时面向对象语言被认为是解决软件复杂性问题的有力武器。C++的面向对象特性看上去使其全面超越了C,支持者认为C++将迅速把上一代语言挤到陈列馆里去了。但是历史并非如此。究其原因,至少有一部分归咎于C++本身。为了与C兼容,C++被迫作出了很多重大的设计妥协,结果导致语言过分华丽,过分复杂。为了与C兼容,C++并没有采用自动内存管.转载 2021-02-04 12:51:07 · 200 阅读 · 0 评论 -
操作系统内存管理,搞懂这8个问题就够了
以下内容转载自https://www.toutiao.com/i6904806276220486152/目录1. 什么是物理内存2. 使用物理内存有什么缺点?3. 什么是虚拟内存?4. 虚拟内存如何映射到物理内存5. 什么是分页内存管理?6. 什么是缺页中断?7. 页面置换算法都有哪些?8. 什么是分段内存管理?01什么是物理内存?我们常说的物理内存大小就是指内存条的大小,一般买电脑时都会看下内存条是多大容量的,话说如果内存条大小是100G,那这100G就都.转载 2021-01-28 00:10:33 · 385 阅读 · 0 评论 -
127.0.0.1和0.0.0.0和localhost的区别
以下内容转载自https://blog.youkuaiyun.com/weixin_44493841/article/details/100204475127.0.0.1和0.0.0.0和localhost的区别127.0.0.1172.0.0.1是本地还回地址,专供自己访问自己,速度快(不用经过整个协议栈),永远都不能出现在主机外部的网络中,所以只适合用在开发环境。 一般我们通过ping 127.0.0.1来测试本地网络是否正常。其实从127.0.0.1~127.255.255.255,这整个都是回环.转载 2020-12-07 23:18:25 · 802 阅读 · 0 评论 -
关于Unicode,字符集,字符编码,每个程序员都应该知道的事
以下内容转载自https://www.toutiao.com/i6673376306677154311/袁吴范2019-03-28 17:48:20李笑来的文章如何判断一个人是否聪明?中提到:必要、清晰、且准确的概念,是一切思考的基石。所谓思考,很大程度上,就是在建立那些概念与概念之间的关联。概念是必要、清晰、且准确的,它们之间的关联也应该是准确的。确实很认同这两句话,搞清楚字符集,字符编码,Unicode等关键词的意义,基本上也就能搞明白遇到的编码问题了。本文力求通俗易懂,但涉及的内.转载 2020-11-30 22:57:41 · 657 阅读 · 0 评论 -
计算机原理-操作系统-内核如何管理内存
本文翻译自:http://duartes.org/gustavo/blog/微信公众号:技术原理君在之前的《进程的虚拟地址空间布局》文章之后,让我们把目光转向内核以及其管理用户内存的机制。我们从gonzo进程图示开始:Linux进程在内核中是由task_struct的实例来表示的,即进程描述符。task_struct的mm字段指向内存描述符(memory descr...转载 2019-07-13 17:34:43 · 451 阅读 · 0 评论 -
计算机原理-操作系统- 转发 微博 Qzone 微信 Linux内核中的数据结构和算法
原创底层软件架构2019-07-12 22:40:12Linux内核(源代码的链接在github)1.链表、双向链表、无锁链表。2.B+ 树,这是一些你无法在教科书上找到的说明。一个相对简单的B+树的实现。我把它作为一个学习练习来帮助理解B+树是如何工作的。这同样也被证明是有用的。...一个在教科书中并不常见的技巧。最小的值在右侧而不是在左侧。所有在一个节点...转载 2019-07-13 17:38:07 · 283 阅读 · 0 评论 -
计算机原理-CPU到底有多快?内存:是我的250倍
原文标题:What Your Computer Does While You Wait原文地址:http://duartes.org/gustavo/blog/本文以一个现代的、实际的个人电脑为对象,分析其中CPU(Intel Core 2 Duo 3.0GHz)以及各类子系统的运行速度——延迟和数据吞吐量。通过粗略的估算PC各个组件的相对运行速度,希望能给大家留下一个比较直观的印象。本文中的...转载 2019-07-09 23:49:33 · 4203 阅读 · 0 评论 -
计算机原理-Linux虚拟地址空间和物理地址空间怎么映射的?
在之前的文章中《CPU是如何访问内存的?》,我们知道了CPU是如何访问内存的,本篇文章我们来讲下虚拟地址空间和物理地址空间的映射。通常32位Linux内核地址空间划分0~3G为用户空间,3~4G为内核空间。注意这里是32位内核地址空间划分,64位内核地址空间划分是不同的。下面以X86为例。物理地址空间布局物理地址空间的顶部以下一段空间,被PCI设备的I/O内存映射占据,...转载 2019-07-09 23:51:33 · 1948 阅读 · 0 评论 -
计算机原理-Linux的5种I/O模型
讲到Linux,这种类unix操作系统的IO模型基本一致,一共5种IO模型: 阻塞式I/O模型 非阻塞式I/O模型 I/O复用型模型 信号驱动I/O模型 异步I/O模型 上面的5中I/O模型,应该所有的讲述LinuxI/O模型的文章都会列举出来。在上述5种I/O模型中,前4种,其实都可以划分为同步I/O方式,只有最有一种异步I/O模型才使用...转载 2019-06-29 18:01:05 · 232 阅读 · 0 评论 -
计算机原理-同步/异步,阻塞/非阻塞概念深度解析
IO 概念区分NIO 现在已经是一个耳熟能详的名词了, 好像人人都能对所谓的 NIO ( Non-Blocking IO, 非阻塞 IO ) 发表一些如何如何提高效率的言论。 但很多东西, 追问几句就会难以自圆其说。四个相关概念:同步(Synchronous)异步( Asynchronous)阻塞( Blocking )非阻塞( Nonblocking)这四个概念的含义以及相互之...原创 2019-06-29 19:08:59 · 1509 阅读 · 0 评论 -
计算机原理-操作系统- Intel主板的布局,系统的内存映射
本文作者:原理君微信公众号:技术原理君我打算从这篇文章开始写一系列关于计算机内幕的文章,旨在揭示现代操作系统内核的工作原理。我希望能对热爱内核的粉丝们有所帮助。我是一个热爱Linux内核的程序员,我之前一直在编码一线,写过超过10万行代码。这篇文章主要讲述了Intel主板的布局,CPU是如何访问内存的,以及系统的内存映射是怎样的?先来热个身吧,让我们先看看现如今In...转载 2019-07-12 11:29:57 · 564 阅读 · 0 评论 -
计算机原理-硬件-Cache是怎样隐藏和保存数据?
本文翻译自:http://duartes.org/gustavo/blog/微信公众号:技术原理君本文简要的展示了现代Intel处理器的CPU cache是如何组织的。有关cache的讨论往往缺乏具体的实例,使得一些简单的概念变得扑朔迷离。也许是我可爱的小脑瓜有点迟钝吧,但不管怎样,至少下面讲述了故事的前一半,即Core 2的 L1 cache是如何被访问的:L...转载 2019-07-17 10:44:45 · 491 阅读 · 0 评论 -
计算机原理-OS-MEM-页面缓存-内存与文件的那些事
本文翻译自:http://duartes.org/gustavo/blog/微信公众号:技术原理君上篇文章我们讲解了内核如何为一个用户进程管理虚拟内存,但是没有涉及文件及I/O。这次我们的讨论将涵盖非常重要且常被误解的文件与内存间关系的问题,以及它对系统性能的影响。提到文件,操作系统必须解决两个重要的问题。首先是硬盘驱动器的存取速度缓慢得令人头疼(相对于内存而言),尤其是磁盘的寻道...转载 2019-07-17 10:57:43 · 266 阅读 · 0 评论 -
计算机原理-OS-引导-内核引导过程详解
本文翻译并且修改自:http://duartes.org/gustavo/blog/微信公众号:技术原理君今天让我们深入内核,去看看操作系统是怎么启动的吧。由于我习惯以事实为依据讨论问题,所以文中会出现大量的链接引用Linux 内核2.6.25.6版的源代码(源自Linux Cross Reference)。如果你熟悉C的 语法,这些代码就会非常容易读懂;即使你忽略一些细节,仍能大致明...转载 2019-07-17 11:00:56 · 1122 阅读 · 0 评论 -
计算机原理-OS-系统上电后-BIOS引导过程-计算机的引导启动过程
原创底层软件架构2019-07-15 22:36:19本文翻译并修改自:http://duartes.org/gustavo/blog/微信公众号:技术原理君之前有一篇文章介绍了《Intel计算机的主板与内存映射》,从而为本文设定了一个系统引导阶段的场景。引导(Booting)是一个复杂的,充满技巧的,涉及多个阶段,又十分有趣的过程。下图列出了此过程的概要:引导过...转载 2019-07-17 11:03:18 · 2997 阅读 · 0 评论 -
计算机原理-IP协议是不可靠无连接的,那为什么当初不直接把它设计为可靠的?
前言今天在知乎上看到这样一个问题,觉得比较有意思,IP协议是不可靠无连接的,那为什么当初不直接把它设计为可靠的?对于这个问题,今天就来谈一谈我的一些想法吧。打个比方我们都知道IP协议是无连接的,传输也是不可靠的。那为什么还要设计这个看似“鸡肋”的协议呢?在开始分析之前,我用一个比方先来解释下。我们应该都寄过信件吧,邮局的信件分为两种:平信和挂号信...转载 2019-07-02 20:16:12 · 792 阅读 · 0 评论 -
计算机原理-操作系统-剖析程序的内存布局
本文分享来自:底层软件架构原文来自国外的小哥:http://duartes.org/gustavo/blog/微信公众号:技术原理君内存管理模块是操作系统的心脏;它对应用程序和系统管理非常重要。在这篇文章中,我将着眼于实际的内存问题,但也不避讳其中的技术内幕。由于不少概念是通用的,所以文中大部分例子取自32位x86平台的Linux和Windows系统。本系列第一篇文章讲述应用程序的...转载 2019-07-13 15:10:10 · 347 阅读 · 0 评论 -
计算机原理-网络-一篇文章搞懂,内网和外网到底怎么通信?
本文原创作者:原理君(cpp软件架构狮)头条号:底层软件架构(cpp软件架构狮)公众号:技术原理君对于我们网络开发的人员来说,经常会用到TCP,UDP协议,但是通常情况下,是在局域网内的协议交互通信。可你们有想过吗?如果是涉及到内网和外网的交互呢?也就是说局域网和公网是怎么 交互呢?假设有两台主机A和B,他们分别处于不同的局域网下,他们的局域网IP都是192.168.1.2。...转载 2019-07-13 15:07:48 · 2861 阅读 · 0 评论 -
计算机原理-TCP到底怎么流量控制?
我们都知道TCP是一种可靠的,面向连接的传输层协议。我们总是希望TCP能够传输的数据越快越好。如果存在这样一种情况,发送方数据发送的非常快,而且接收方耗尽自己的资源也根本来不及接收,那这些多余的数据就会被丢弃,这就违背了TCP可靠的宗旨了。所以就需要引入一种流量控制的手段:让发送方不要发送太快,既让接收方能够顺利接收数据,而且也不会造成网络链路的阻塞。思路沿着这个思路...转载 2019-07-03 23:47:07 · 354 阅读 · 0 评论 -
计算机原理-Linux中直接I/O的机制原理
在介绍直接 I/O 之前,先来介绍下直接I/O这种机制产生的原因。毕竟已经有了缓存I/O(Buffered I/O),那肯定能够像到缓存I/O有缺陷吧,就按照这个思路来。什么是缓存 I/O (Buffered I/O)缓存 I/O 又被称作标准 I/O,大多数文件系统的默认 I/O 操作都是缓存 I/O。在 Linux 的缓存 I/O 机制中,操作系统会将 I/O 的数据缓存在...转载 2019-07-02 20:48:59 · 236 阅读 · 0 评论 -
计算机原理-Linux select的实现原理到底是怎样的?
熟悉Linux环境编程的程序员们应该对select系统调用了如指掌吧,因为它的功能比较强大,可以用来定时,监听等等。可你们是否想过它的实现原理?这篇文章就来聊聊它的实现原理。首先按照惯例,简单的讲述下select使用方法。select是用来监听多个文件句柄的状态变化。程序会阻塞在select等待,直到监听的句柄有一个或者多个状态发生变化。函数的原型如下:int select...转载 2019-07-02 20:45:55 · 1503 阅读 · 0 评论 -
计算机原理-为什么fork会返回两次?
言归正传,这其实自己脑子灵光一现的问题,当然这个“返回两次”需要打引号。读文章的你觉得能回答这个问题?如果能:说明对进程的理解比较深刻的。如果不能,我们接着往下看文章吧。下面展示的是典型的使用方法:#include<unistd.h>#include<stdio.h>#include<stdlib.h> int main(int argc,char *...转载 2019-07-02 20:38:00 · 1047 阅读 · 1 评论 -
计算机原理-怎样解决Linux内存泄漏?
首先说明下,作者本人是C/C++程序员出道。C/C++什么都好,就是内存管理让人头疼。对于这种没有Garbage Collection的语言,C 和 C++ 程序中完全由程序员自主申请和释放内存,稍不注意,就会在系统中导入内存错误。同时,内存错误往往非常严重,一般会带来诸如系统崩溃,内存耗尽(OOM),逻辑异常(内存踩踏)这样严重的后果。这些后果,都是无法接受的。最要命的是内存泄漏通常是无声无息...转载 2019-07-02 20:14:23 · 583 阅读 · 0 评论 -
计算机原理-从时间碎片角度理解阻塞IO模型及非阻塞模型
阻塞模型限制了服务器的并发处理能力(伸缩性或同时处理的客户端连接数)传统的网络服务器只支持阻塞模型,该模型下,针对每个客户端连接,服务器都必须创建一个线程来处理这个连接上的请求,服务器必须维持着这些线程直到线程中的处理工作结束。服务器上所能创建的线程数量是有限的,WHY? 进程上下文切换是耗时的过程 创建的进程本身占用资源,比如每个进程或线程占用一定容量的内存 等...转载 2019-07-02 20:07:38 · 208 阅读 · 0 评论 -
计算机原理-Linux信号机制分析
1,信号本质软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发...转载 2019-07-02 19:34:57 · 704 阅读 · 0 评论 -
计算机原理-Linux内核体系结构
大家都知道源理君很多期的文章都是关于Linux内核的功能,本着公众号的原则,只讲原理,将复杂的代码转换为通俗易懂的文字,图片。最后呈现给大家。可是源理君一直没有从大框架上系统的给各位梳理Linux内核体系结构。那本文就一个目的,站在山顶向下看。Linux系统的层次框架从图中我们可以分为两个层次: 用户空间 内核空间 在最上层是用户空间,也就是运行应用程序。用户...转载 2019-07-08 11:35:41 · 347 阅读 · 0 评论 -
计算机原理-Linux网络协议栈【驱动和网卡怎样交互?】
驱动和网卡的交互过程很少人会关注,但是如果你懂这方面的知识,会对用户态的网络编程更加理解深刻和通透。驱动和网卡之间是异步通信。驱动在请求发送数据之后CPU就去干别的事情去了。网卡发送完包之后通过中断通知CPU,CPU再通过驱动程序了解到结果。和发送数据一样,接收数据也是异步的。网卡把数据倒腾到主存之后再通过中断通知CPU。因此,预留一些空间来缓存发送和接受的buffer是必要的...转载 2019-07-03 23:49:37 · 1230 阅读 · 1 评论 -
计算机原理-Linux进程调度:完全公平调度器CFS
对于分时操作系统来说,表面上看起来同时多个进程在运行,其实系统内部同一时间只有一个进程在运行,但进程是以比较快的速度在切换。这样就引入了进程切换和进程调度的概念了。进程调度应该是操作系统的核心功能了,它非常的复杂。尽管刚出Linux开发为的是桌面操作系统,但现在服务器,嵌入式设备,个人pc都会使用它,不同领域对进程调度的差异非常大,所以要考虑整体的平衡性。Linux进程在调度器中被分为三种:...转载 2019-07-03 23:57:04 · 681 阅读 · 0 评论 -
计算机原理-为什么会产生内存碎片
要想回答这个问题,就得刨根问底,内存到底是怎样分配的?在内核态的角度来看,进程需要分配内存的方式有两种:brk和mmap这两个系统调用。 brk是数据段的最高地址指针_edata往高地址增长; mmap是建立了页到用户进程的虚拟空间映射,在进程的虚拟地址空间中,堆和栈之间的大空间中找一块空闲的地址。 这两种方式分配到的都是虚拟内存,并还没有分配真正的物理地址。会在第一...转载 2019-06-28 17:13:00 · 1340 阅读 · 0 评论 -
计算机原理-互斥锁实现原理以及使用注意点
互斥锁可以说是程序员必备,那必备技能使用有哪些注意事项呢?它怎么实现的呢?下面我们来分析下。互斥锁基本原理 互斥锁是一个二元变量,其状态为开锁(允许0)和上锁(禁止1),将某个共享资源与某个特定互斥锁在逻辑上绑定(要申请该资源必须先获取锁)。 访问公共资源前,必须申请该互斥锁,若处于开锁状态,则申请到锁对象,并立即占有该锁,以防止其他线程访问该资源;如果该互斥锁处于锁定...转载 2019-06-28 17:41:11 · 6769 阅读 · 0 评论 -
计算机原理-原子操作,内存屏障,锁总结
原理 CPU提供了原子操作、关中断、锁内存总线,内存屏障等机制;OS基于这几个CPU硬件机制,就能够实现锁;再基于锁,就能够实现各种各样的同步机制(信号量、消息、Barrier等等等等)。 所有的同步操作最基础的理论就是原子操作。内存屏障,锁都是为了保证在不同的平台或者是CPU类型下的原子操作。 原子操作在单核,单线程/无中断,且编译器不优化的情况下是确定的,是按照C/C...转载 2019-06-28 17:40:29 · 1431 阅读 · 0 评论 -
计算机原理-怎样理解socket的实现机制
要写网络程序就必须用Socket,这是程序员都知道的。而且,面试的时候,我们也会被问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,write等几个基本的操作。是的,就跟常见的文件操作一样,只要写过就一定知道。对于网络编程,我们也言必称TCP/IP,似乎其它网络协议已经不存在了。对于TCP/IP,我们还知道TCP和UDP,前...转载 2019-06-28 17:39:45 · 204 阅读 · 0 评论 -
计算机原理-你真的理解数据链路层吗?
学过计算机网络的朋友们应该都知道OSI七层模型,今天要聊的数据链路层是属于七层模型中的第二层。所以应该算是计算机网络体系中的底层了。数据链路层使用的信道主要有两种类型: 点对点信道:也就是字面意思,点对点得通信方式。 广播信道:这种信道是一对多的方式,所以整个过程也比较复杂。必须使用一些信道协议来协调网络中的主机数据发送。 我们先来通过一个例子数据链路层所处的位...转载 2019-06-28 17:22:02 · 830 阅读 · 0 评论 -
计算机原理-怎样去理解Linux用户态和内核态?
在Linux技术讨论中经常会用户态和内核态术语脱口而出,可你们想过吗?用户态和内核态代表是什么?本片文章,就来谈一谈这个话题。我们先来看一张Linux整体架构图。从图上我们可以看出来通过系统调用将Linux整个体系分为用户态和内核态(或者说内核空间和用户空间)。那内核态到底是什么呢?其实从本质上说就是我们所说的内核,它是一种特殊的软件程序,特殊在哪儿呢?控制计算机的硬件资源,例如...转载 2019-06-28 17:18:49 · 393 阅读 · 0 评论 -
计算机原理-硬盘原理
简介硬盘作为现在计算机内部最后的机械存储部件,速度相比较内存和Cache而言会慢好几个数量级。但所幸的是,硬盘的成本是远远低于内存的。因此硬盘作为永久存储器是比较合适的,所幸的是为了克服硬盘慢速带来的问题,操作系统会对硬盘的使用有一个优化,下面让我们先来看硬盘的原理。一个典型的硬盘如图所示,图片来源网络。由上图可以看到,硬盘上磁盘进行高速旋转,磁头臂在磁盘上来回...转载 2019-06-28 17:16:53 · 1296 阅读 · 0 评论