计算机网络与操作系统
计算机网络与操作系统学习
心文花雨
这个作者很懒,什么都没留下…
展开
-
Linux top 命令
主要参数d:指定更新的间隔,以秒计算。q:没有任何延迟的更新。如果使用者有超级用户,则top命令将会以最高的优先序执行。c:显示进程完整的路径与名称。S:累积模式,会将己完成或消失的子行程的CPU时间累积起来。s:安全模式。i:不显示任何闲置(Idle)或无用(Zombie)的行程。n:显示更新的次数,完成后将会退出to显示参数:PID(Process ID):进程标示号。US...原创 2019-07-26 18:05:48 · 95 阅读 · 0 评论 -
一个简单的 http 服务器
http_server.c#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <pthread.h>#include <sys/socket.h>#include <netinet/in....原创 2019-02-08 19:31:46 · 203 阅读 · 0 评论 -
IP 协议
一、概念IP协议是TCP/IP协议族的核心协议,为上层协议提供无状态,无连接,不可靠的服务,它有一种能力将数据从A主机跨网络传输到B主机,IP地址分为网络地址和主机地址。二、数据结构版本号:占4位,指IP协议的版本,有IPv4和IPv6两种,对于IPv4协议该字段就是4 ;首部长度:占4位,指IP协议的报头长度,范围在20-60字节 ;服类型务:占8位,只有在使用区分服务时...原创 2020-02-20 19:14:13 · 249 阅读 · 0 评论 -
TCP 与 UDP 的区别
一、自身角度1.无连接和面向连接UDP:“无连接”在网络中使用UDP协议时,只需要提供对端的IP地址和端口号就可以与对端进行通信,并不需要和对端建立连接TCP:“面向连接”在网络中使用TCP协议时,不仅需要对端的IP地址和端口号,还需要通过“三次握手”建立连接,“四次挥手”断开连接2.不可靠和可靠UDP:不可靠。UDP没有提供使数据可靠传输的机制,UDP的报头中...原创 2019-03-31 18:31:08 · 734 阅读 · 0 评论 -
Linux 基本指令
命令格式:命令名称 [选项参数] [操作对象]man:num 只在第num章节找1 普通的命令2 系统调用,如 open,write 之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)3 库函数,如 printf,fread4 是特殊文件,也就是 /dev 下的各种设备文件5 指文件的格式,比如 passwd, 就会说明这个文件中各个字段的含义6 给游...原创 2019-04-05 12:39:50 · 121 阅读 · 0 评论 -
五种I/O模型
一、五种基本I/OI/O输入输出过程:等待+数据拷贝1. 阻塞IO 应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好。如果数据没有准备好,一直等待。数据准备好了,从内核拷贝到用户空间2. 非阻塞IO 我们把一个套接口设置为非阻塞就是告诉内核,当所请求的I/O操作无法完成时,不要将进程睡眠,而是返回一个错误。这样我们的I/O操作函数将不断的测试...原创 2019-04-26 11:13:15 · 138 阅读 · 0 评论 -
页面置换算法
一、最佳置换算法(OPT)1. 原理每次选择未来长时间不被访问的或者以后永不使用的页面进行淘汰。从主存中移出永远不再需要的页面,如无这样的页面存在,则选择最长时间不需要访问的页面,所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。2. 举例假定系统为某进程分配了三块物理块,并有以下页面:7,0,1,2,0,3,0,4,2,3,0...原创 2019-04-26 13:34:32 · 3858 阅读 · 0 评论 -
正则表达式 --文件格式化处理
一、格式化打印 printf字符 意义 \a 警告声音输出 \b 退格键(Backspace) \f 清除屏幕(form feed) \n 输出新的一行 \r 回车(Enter) \t 水平的 [Tab] 按键 \v 竖直的 [tab] 按键 \xNN N 为数字,可以转换为字符 C语言 %ns ...原创 2019-04-26 17:46:49 · 347 阅读 · 0 评论 -
进程概念
一、定义(1)进程是程序的一次执行过程(2)进程是程序及其数据在处理机制上顺序执行时所发生的活动(3)进程是具有独立功能的程序在数据集合上运行的过程,它是系统进行资源分配和调度的基本单位二、PCB1. 概念进程=PCB+程序(程序段+数据段),PCB是进程存在的唯一标志。创建进程就是创建PCB,撤销进程就是撤销PCB。系统为每个运行的程序(一个指令序列)配置一个数据结构...原创 2019-05-04 16:57:07 · 284 阅读 · 0 评论 -
银行家算法
一、数据结构可利用资源向量Availiable 最大需求矩阵Max 分配矩阵Allocation 需求矩阵Need注:Need [i,j] = Max [i,j] - Allocation [i,j]二、算法介绍1. 银行家算法(1)如果Request(i) [j] <= Need [i,j],下一步(2)如果Rquest(i) [i,j] <= Avail...原创 2019-06-10 14:25:49 · 3298 阅读 · 0 评论 -
Linux下的重要目录
Linux下的重要目录 /proc /proc是linux内核中提供的文件系统,在运行访问内核数据结构,改变内核设置的机制。proc...原创 2018-08-20 21:35:54 · 183 阅读 · 0 评论 -
setjmp 和 longjmp
一、引入在C中,goto语句是不能跨越函数的,而执行这样跳转功能的是函数 setjmp 和 longjmp。这两个函数对于处理发生在深层嵌套函数调用中的出错情况是非常有用的。这两个函数也称为非局部 goto,它们可以在栈上跳过若干调用帧,返回到当前函数调用路径的某一函数中。#include <setjmp.h>int setjmp(jmp_buf env);// 返回值:...原创 2019-07-12 20:51:40 · 1113 阅读 · 0 评论 -
用户态和内核态
1. 用户态和内核态的概念区别究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重点和着眼的角度放在了实现的功能和代码的逻辑性上,先看一个例子:1)例子void testfork(){ if(0 == fork()) { printf(“create new process...转载 2019-07-05 08:43:39 · 113 阅读 · 0 评论 -
进程环境
一、前言C 程序总是从 main 函数开始,首先来看一下 main 函数的原型int main(int argc, char *argv[]){ ... return 0;}int 指明了main()函数的返回类型,函数名后面的圆括号一般包含传递给函数的信息。对于void main(),有些编译器允许这种形式,但是还没有任何标准考虑接受它。argc 是参数的数目...原创 2019-07-11 23:41:38 · 138 阅读 · 0 评论 -
进程环境之环境变量
一、前言每个程序都接收到一张环境表。它是一个字符指针数组,其中每个指针包含一个以 null 结尾的字符串的地址。全局变量environ则包含了该指针数组的地址:extern char **environ;二、在shell 中获取环境变量1.使用env命令可以列出当前shell环境下的所有环境变量2. 使用echo $环境变量名命令可以查看单个环境变量3.使用...原创 2019-07-12 10:52:40 · 570 阅读 · 0 评论 -
守护进程
一、什么是守护进程守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进 程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。 比如,作业规划进程crond,打印进程lpd等。二、守护进程的特征(1)守...原创 2019-07-26 12:50:11 · 381 阅读 · 0 评论 -
三次握手,四次挥手简单介绍
一、三次握手建立连接的过程:(1)调用 socket,创建文件描述符,调用 connect,向服务器发起连接请求,connect 会发出 SYN 段并阻塞等待服务器应答(2)服务器收到客户端的 SYN,会应答一个 SYN+ACK 段表示同意建立连接(3)客户端收到 SYN+ACK 后会从 connect() 返回,同时应答一个ACK段这个建立连接的过程,通常称为三次握手,为...原创 2019-02-08 18:15:04 · 331 阅读 · 0 评论 -
套接字编程
一、基本概念ip 地址:在网络中标识一台唯一的主机,是无符号4个字节的整数端口:在主机上标识一个进程,一个进程可以使用多个端口,但一个端口只能被一个进程使用五元组:源 ip 地址,目的 ip 地址,源端口,目的端口,通信协议网络字节序:CPU在对数据内存中进行存取时候的方向分出了大小端,MIPS -- RICS 处理器 -- 大端(低地址存高位),x86 处理器 -- 小端(低地址...原创 2019-02-07 18:24:11 · 288 阅读 · 0 评论 -
git 和 github 的用法
一、如何创建GitHub账号 1.注册账号 2.注意事项: (1)用户名只能包含字母数字字符或单个连字符,并且不能以连字符开头或结尾。(2)密码至少使用一个字母,一个数字和七个字符。二、使用 Linux 上传代码1.第一次上传代码(1)git clone https://github.com/MonologueX/ceshi-.git(2)echo "# ce...原创 2018-10-04 19:28:54 · 1343 阅读 · 0 评论 -
进程分类
一、僵尸进程1. 产生原因子进程退出为了保存退出状态,退出资源后不会被完全释放,等待父进程来获取退出状态,然后释放子进程所有资源。父进程已收到子进程结束的消息,没有明确的答复操作系统内核,此时操作系统内核会一直保存该子进程的部分PCB信息,同时将进程的状态置为defunct,这个子进程将会成为僵尸进程,占着系统资源不释放。通过ps -ef | grep "xxx"找到僵尸进程的PID,通过...原创 2018-10-06 16:17:49 · 724 阅读 · 0 评论 -
ping: www.baidu.com: 未知的名称或服务 Linux 不能上网
[root@localhost ~]# vim /etc/resolv.conf# Generated by NetworkManager search localdomain ...原创 2018-10-08 13:35:52 · 20046 阅读 · 4 评论 -
进程创建, 等待, 终止
一、创建进程1. 函数 fork#include <unistd.h>pid_f fork(void);// 返回值:子进程返回0,父进程返回子进程ID,出错返回 -1;首先我们来看一下如何使用 fork,代码如下:#include <stdio.h>#include <unistd.h>#include <stdlib.h&...原创 2018-10-19 11:15:59 · 318 阅读 · 0 评论 -
自行查找资料, 调研除了gcc, 还有哪些常用的牛逼的编译器(不限制编程语言, 不限制平台)
1.除了gcc, 还有哪些常用的牛逼的编译器(不限制编程语言, 不限制平台) EGCS:包括了C/C++/Obj-C/Fortran等编译器 Clang:licence极度友好,代码质量非常棒,采用的IR为LLVM IR非常优秀,但是Clang依赖于的LLVM,目前的性能无法与GCC相提辩论,缺乏对GCC一些Builtin函数、自身带的汇编器的孱弱,对一些开源软件没有办法编译过去。IC...原创 2018-10-31 13:31:45 · 425 阅读 · 0 评论 -
进程间通信 --管道
一、进程间通信常用的方式(1) 管道(2) System V(3) POSIX二、目的(1) 数据传输一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。(2) 资源共享多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。(3) 通知事件一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如...原创 2018-11-27 20:32:26 · 204 阅读 · 0 评论 -
进程间通信 --消息队列
一、基本知识1. 概念消息队列实际上是操作系统在内核为我们创建一个队列,多个进程可以通过向队列中添加节点或获取节点来进行数据传输,它是一个全双工通信,可读可写(可以发送数据,也可以接收数据)。2. 如何获取数据用户组织一个带有数据传输的数据块,添加到队列中,其他的进程从队列中获取数据块,也就是说消息队列传输的是一个个带有类型的数据块。二、IPC(进程间通信)对象1.内核为...原创 2019-01-18 10:46:34 · 269 阅读 · 0 评论 -
进程间通信 --共享内存
一、为什么共享内存是最快的IPC共享内存是直接将一块物理内存映射到虚拟地址空间中,因此进行数据传输时比其他通信方式少了两步用户态与内核态数据拷贝的过程,所以共享内存是最快的IPC。二、使用步骤(1)创建共享内存(2)将共享内存映射到虚拟地址空间(3)内存的数据操作(4)a.解除映射关系 b.删除共享内存三、代码演示1. 函数说明(1)创建...原创 2019-01-18 11:53:29 · 341 阅读 · 0 评论 -
进程间通信 --信号量
一、概念进程间通信方式之一,是一种功能较强的机制,可以用来解决互斥与同步问题,它只能被两个标准的原语wait(S) 和 signal(S) 来访问,也可以记为“P操作”和“V操作”;它的本质是具有一个等待队列的计数器,相当于一把锁,当计数器为0时,需要等待。当计数器大于0时,信号量执行P()操作,计数器减1,执行V()操作,计数器加1;另外由于信号量是一个原子操作,所以它的访问不会出问题。...原创 2019-01-18 21:37:39 · 337 阅读 · 0 评论 -
线程生产者与消费者模型
生产者与消费者模型:编程的思想/设计模式一个场所,两类角色,三种关系场所作用:(1)峰值压力缓冲(2)解耦合:减少关系(3)支持并发角色:生产者 消费者关系:(1)生产者与生产者:互斥(2)生产者与消费者:同步加互斥(3)消费者与消费者:互斥注意:判断应该用 while 循环代码:#include <stdio.h>#includ...原创 2019-01-24 21:54:10 · 165 阅读 · 0 评论 -
信号
一 、基本概念信号是 Linux 进程间通信的一种机制,全称为软中断信号,也被称为软中断。信号本质上是在软件层次上对硬件中断机制的一种模拟,它提供了一种处理异步事件的方法,也是进程间唯一的异步通信方式,操作系统修改了目标进程的 PCB 内容,即为对其发送了信号,信号以 SIG 开头,我们可以用 kill -l 命令查看有多少信号,1~31 信号是继承 UNIX 而来,每一个信号都对应一个指定的...原创 2019-01-19 18:36:17 · 206 阅读 · 0 评论 -
线程池
一、概念一种线程使用模式,由一个或多个线程和任务队列组成,线程池能够保证内核的充分利用,还能防止过分调度,可用线程数量应该取决于可用的并发处理器、处理器内核、内 存、网络sockets等的数量。二、使用场景(1)需要大量的线程来完成任务,且完成任务的时间比较短(2)对性能要求苛刻的应用,比如要求服务器迅速响应客户请求(3)接受突发性的大量请求,但不至于使服务器因此产生大量线程的...原创 2019-02-01 17:01:09 · 176 阅读 · 0 评论 -
多线程
一、线程概念线程就是一个轻量级进程,是程序执行的最小单位,线程分为主线程和新线程,执行main函数的线程称为主线程,谁先运行是随机的,由调度器决定。线程是进程内部的一个执行分支,一个程序至少有一个进程,一个进程至少有一个线程,这些进程有相同的虚拟地址后空间,因此线程调度切换的成本、创建销毁成本相较于进程较低(因为创建进程需要分配PCB,需要分配资源,而线程只需要将资源给某个线程)。一个进程里面...原创 2019-01-23 18:00:22 · 209 阅读 · 0 评论 -
网络版五子棋
一、前言五子棋是是一种两人对弈的纯策略型棋类游戏,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成5子连线者获胜,它容易上手,老少皆宜,而且趣味横生,一起来看一下如何用C语言实现五子棋的对弈。二、五子棋模块(1)初始化:把每一个点置为 +void Init(char map[ROW][COL]){ memset(map, '+', ROW*COL*size...原创 2019-02-14 14:45:26 · 1810 阅读 · 0 评论 -
网络基础知识
一、基本概念单机局域网:在某一区域内由多台计算机互联成的计算机组广域网:是连接不同地区局域网计算机通信的远程网ip 地址:在网络上标识唯一的主机端口:标识主机上的程序协议:统一的约定的数据格式二、网络通信协议的分层网络通信协议:数据在网络传输的格式,网络通信过程复杂,应对的场景不同,就有很多协议,把协议的实现封装起来,对外提供一个方法,给其他人使用。协议的分层:...原创 2019-02-06 19:28:56 · 243 阅读 · 0 评论 -
Linux下实现彩色进度条程序
代码:#include <stdio.h>#include <unistd.h>#include <string.h>int main(){ int i = 0; char bar[101]; const char *lable = "|/-\\"; for (i = 0; i <= 100; i++) ...原创 2018-09-26 12:55:43 · 231 阅读 · 0 评论