操作系统
文章平均质量分 85
jinixin
这个作者很懒,什么都没留下…
展开
-
「操作系统」进程 线程 协程
作业与进程的区别 前者是由用户提交,后者是由系统自动生成;前者以用户任务为单位,后者是操作系统控制的单位. 作业 = 程序 + 数据 + 说明书, 进程 = 程序 + 数据 + PCB 一个作业可以分为多个进程来完成 进程与线程 进程是资源分配的最小单位, 线程是CPU调度的最小单位 一个进程下可包含1至多个线程 一个进程有独立的地址空间, 故进程间不能共享数据, 该进程下的多个线程共享该进程的地址空间,..原创 2021-05-28 11:58:34 · 294 阅读 · 1 评论 -
「网络」套接字 (Socket)
内核态与用户态 内核态: 可以访问系统资源, 比如CPU, 内存, 网络, 外设 用户态: 只能访问进程自己的资源, 无法访问系统资源 用户态访问系统资源时, 需通过系统调用, 即CPU切到内核态, 读取资源后再切回用户态. 中间涉及堆栈上下文的切换, 为避免频繁切换, 有了"用户缓冲区"和"系统缓冲区" 当用户进程需要从"磁盘/网络"中读取数据时, 系统会将"系统缓冲区"的数据复制到"用户缓冲区". 若"系统缓冲区"中没有对应数据, 系统会将当..原创 2021-05-27 17:27:09 · 752 阅读 · 0 评论 -
「网络」HTTP拾零
HTTPS 中间人攻击, 攻击者分别与通讯两端建立单独联系, 并交换其收到的数据, 使两端认为会话是私密的, 其实全被中间人控制,防御为HTTPS HTTPS = HTTP + TLS/SSL, HTTP包传递给TLS, 再传递给TCP. HTTPS融合了非对称加密与对称加密, 非对称加密通信仅用于首次交换对称密钥, 之后通信均使用对称加密, 提升速度 RSA非对称加密, 私钥自己持有, 公钥所有人持有; 公钥加密, 仅私钥可解密; 私钥加密, 仅公钥可解密...原创 2021-05-27 17:12:49 · 196 阅读 · 0 评论 -
「操作系统」IO多路复用
本文主要介绍在IO多路复用模型中, 第一阶段使用到的四个函数: select, poll, epoll, kqueue select select函数 定义 select用来监视多个文件描述符, 当文件描述符所对应事件状态不改变时, select会阻塞. 当某个文件描述符所对应事件状态改变后, select会返回 Python案例 readable_list, writeable_list, execable_list = select.s原创 2021-03-11 15:44:08 · 207 阅读 · 0 评论 -
「操作系统」五种IO模型 零拷贝
内核态与用户态 内核态: 可以访问系统资源, 比如CPU, 内存, 网络, 外设 用户态: 只能访问进程自己的资源, 无法访问系统资源 用户态需要访问系统资源时, 需要CPU切到内核态, 读取资源后再切回用户态. 中间涉及堆栈上下文的切换, 为避免频繁切换, 有了"用户缓冲区"和"系统缓冲区". 当用户进程需要从"磁盘/网络"中读取数据时, 系统会将"系统缓冲区"的数据复制到"用户缓冲区". 若"系统缓冲区"中没有对应数据, 系统会将当前进程挂起..原创 2020-10-12 21:15:19 · 280 阅读 · 0 评论 -
「操作系统」内存/编译/并发控制
编译 编译器: 将源码转成二进制的机器码. 比如gcc, javac 预处理: 替换宏定义和头文件地址 编译: 转为汇编 汇编: 转为二进制机器码, 此步将产生目标文件 链接: 分为静态链接与动态连接 静态连接: 载入代码时就会确定代码地址, 将库一起打包入可执行文件, 因此可执行文件很大, 不方便库升级, 不共享库, 耗内存. 动态链接: 调用时才确定代码地址, 共享..原创 2020-09-22 00:09:07 · 159 阅读 · 0 评论 -
「操作系统」调度与死锁
作业与进程的区别 前者是由用户提交,后者是由系统自动生成;前者以用户任务为单位,后者是操作系统控制的单位. 作业 = 程序 + 数据 + 说明书, 进程 = 程序 + 数据 + PCB 一个作业可以分为多个进程来完成 调度 作业调度(高级调度): 把作业从外存调入内存 进程调度(低级调度): 进程获得处理器调度 调度算法 当多个进程(作业)要使用有限资源时, 必须按一定规则选择进程(作业)来占用..原创 2020-09-14 22:07:45 · 329 阅读 · 0 评论 -
「网络」TCP/IP与MAC
TCP定义 TCP 是一个可靠的, 面向连接的, 基于字节流的, 全双工协议 面向连接的: 先建立逻辑连接, 再发送数据 可靠的: 超时重传, 流量控制, 拥塞控制 基于字节流: 没有固定报文边界 全双工: 发送接收并行 TCP/IP分层 具体分层 应用层: HTTP, FTP, SMTP, DNS, POP3 传输层: TCP, UDP; 信息单元为段 ..原创 2020-09-07 22:56:52 · 778 阅读 · 0 评论 -
「操作系统」同步 异步 阻塞 非阻塞
同步/异步, 阻塞/非阻塞分别是什么? 本篇文章想简单谈谈.同步/异步当请求一个方法时, 调用者需要等待该方法执行完成, 且该方法会返回执行结果, 则对于调用者来说就是"同步"的.当请求一个方法时, 调用者不需要等待该方法执行完成, 该方法被调用后会立即返回, 注意该方法返回的不是执行结果, 比如返回None(NULL), 则对于调用者来说便是"异步"的....原创 2019-05-20 00:16:19 · 529 阅读 · 0 评论 -
「操作系统」进程状态模型
进程由程序代码, 相关数据集与进程控制块(Process control block, 简称PCB)所构成. 当处理器开始执行这段代码时, 我们将执行的实体称为进程, 即计算机中已运行的程序.与进程相关的一些控制信息都保存在进程控制块中, 进程控制块是操作系统支持多进程的关键. 进程控制块中的状态字段用于记录进程目前所处的状态.进程派生即在一个进程中创建一个新进程, 原先的进程为父进程, 新进程为子进程.原创 2019-05-19 19:27:36 · 4710 阅读 · 0 评论 -
「消息队列」消息队列概述与AMQP协议
前面几篇文章中谈了rpc服务, rpc可用于进程间通信, 使应用得以解耦, 而进程间通信还可使用消息队列来完成.本篇文章就简单谈谈消息队列, 以及其所遵守的AMQP协议.消息队列的定义消息队列, 从字面上看其必和队列有一定关系. 而队列想必大家也都有所了解, 其是一种基本的数据结构, 先入先出, 可以起到暂存数据, 共享数据的作用. 消息队列和前面的队列类似, 只是其额外还支持数据持久化, 处理确认, 流量控制, 跨服务器投递等功能.官方定义消息队列(Message Queue)是原创 2018-11-07 21:50:54 · 613 阅读 · 0 评论 -
「RPC」简述RPC
最近工作中一直有用到Thrift,所以想对此做个简单小结。分为两篇,第一篇(即本篇)介绍rpc是什么、其与http服务的区别、基本架构、使用步骤等,第二篇介绍常用rpc框架Thrift的Python案例。平时写程序中我们常常会用到函数调用,而一般的函数调用都在同一个进程内。但如果现在要求某个函数去调用另个工程里的一个函数,该怎么办呢?我最先想到的是http服务,编写RESTful风格的url并通过http请求传递参数从而获得远程工程的响应,这个方法可以很方便的在两个程序间保持通讯。原创 2018-06-16 14:37:48 · 1038 阅读 · 0 评论 -
「信号机制」应用—程序hang住怎么办
想必大家在工作中可能遇到过这样的问题,调试和执行程序都没有问题,但在运行一段时间后,程序莫名阻塞在某处。发生这种问题,第一反应就是头疼,茫茫码海,该如何去定位问题呢?这时我会想通过增加日志寻找在哪处进入无限循环或是hang住了,但除非一次性加入很多日志,否则无法准确定位问题点。而一次无法定位,我只好等到第二次hang住后,针对日志反馈再继续对可疑区域增加记录,如此往复。结果服务可靠性没有了保证,而且整个人也十分受挫。那有没有什么办法可以一下子就找到问题在哪?不打那么多没用的日志,不用使服务多次停原创 2018-05-20 20:42:43 · 2196 阅读 · 0 评论 -
「信号机制」Python信号处理—signal模块
本文介绍Python语言中负责信号处理的signal模块,并会给出一些小demo.signal模块该模块提供Python中信号处理的机制,下面是几个常用的方法1. signal.signal(signalnum, handler)注册signalnum信号量的处理函数为handler其中signalnum为待注册的信号量,handler为该信号量的处理器,其是一个可调用对象,该对象必须接受两个参数,分别是信号量signum,当前程序运行堆栈frame,这两个参数Python解释器会自动传原创 2018-05-20 20:30:02 · 15795 阅读 · 0 评论 -
「信号机制」简述Linux信号
工作中再次接触到了Linux信号,以前认为由于离底层比较远,信号没什么用,但这次发现其的一个用途,故打算在此做个简单记录。信号是操作系统和程序间通信的一种方式,程序监听信号,并在收到信号后按照既定指示进行下一步操作,信号可由操作系统或其他应用程序发出。操作系统为每个信号都设计好了默认操作,而我们通过编程可以代替系统先前设定的操作,或直接要求程序忽略某些信号。因此程序在接收到信号后,可能会按系统既定的默认操作执行,也可能会忽略该信号,或者使用我们编写的替代方案。但有些信号是不可被替换的,具体下面会提原创 2018-05-20 20:10:54 · 1423 阅读 · 0 评论 -
vim命令小结
工作中经常用到vim编辑器,在此对vim做一个简单小结。抛开繁杂,挑出常用命令,做到好记又能提高工作效率。概述说到vim,不得不提vi。vi是一种轻巧的非图形化文本编辑器,“UNIX程序兼容标准”要求系统必须配备vi,而多数Linux配备有加强版的vim。相比vi,vim有着更好的使用体验,命令行键入“vi”便可知道系统所使用的编辑器版本。下面使用vim命令打开xx文件:1)vim xx:打开xx文件,并将光标定位到第一行2)vim + xx:打开xx文件,并将光标定位到最后一原创 2018-05-06 03:53:38 · 339 阅读 · 0 评论