操作系统
文章平均质量分 80
ShawnLeex
坚持做自己懒得做但是正确的事情,你就能得到别人想得到却得不到的东西。
展开
-
Linux下的find指令详解
在Linux下有很多查找指令:locatewhereiswhichfind 在这些查找指令中功能最强大的当属find指令了。find命令在目录结构中搜索文件,并执行指定的操作。Linux下find命令提供了相当多的查找条件,功能很强大。即使系统中含有网络文件系统,find命令在该文件系统中同样有效。所以在本片博客中主要讨论find命令。(一)find命令的格式:find 路径 -命令参数 [输出原创 2016-05-24 15:28:45 · 524 阅读 · 0 评论 -
atexit函数详解
对C语言有所了解的人都知道main函数是整个程序的入口,但是其实不然,在内核中可以使用链接器来设置程序的开始地方。当内核使⽤⼀个exec函数执⾏C程序时,在调⽤main函数之前先调⽤⼀个特殊的启动例程,可执⾏程序将此例程指定为程序的起始地址。启动例程从内核获取命令⾏参数和环境变量,然后为调⽤main函数做好准备。 前面我们关注的是程序开始进入时的调用函数,而atexit函数是一个特殊原创 2016-07-03 10:05:57 · 22853 阅读 · 2 评论 -
基于TCP协议的服务器/客户端程序
作为传输层的主要协议,TCP协议不仅可以支持本地的数据通信,还可以支持跨网络的进程间通信。在偌大的互联网中,我们可以通过“IP地址+端⼜号”标识互联网中唯一的一个进程。然而,“IP地址+端⼜号”就称为socket,这就是网络socket编程。在TCP协议中,建⽴连接的两个进程各⾃有⼀个socket来标识,那么这两个socket组成 的socketpair就唯⼀标识⼀个连接。socket原创 2016-07-26 21:21:59 · 9833 阅读 · 2 评论 -
Linux下FILE结构体字段详解
struct file结构体定义在include/linux/fs.h中定义。文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个关联的 struct file。它由内核在打开文件时创建,并传递给在文件上进行操作的任何函数。在文件的所有实例都关闭后,内核释放这个数据结构。在内核创建和驱动源码中,struct file的指针通常被命名为file或filp。如下所示:原创 2016-07-05 15:47:18 · 994 阅读 · 0 评论 -
Linux-信号机制详解(一)
之前有写过SystemV的信号量机制,现在是信号。这里的信号和前面的信号量是不同的。这里的信号是进程给操作系统或进程的某种信息,让操作系统或者其他进程做出某种反应。 信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送原创 2016-07-17 00:29:05 · 11048 阅读 · 1 评论 -
Linux-信号机制详解(二)
前面的详解(一)已经详细讨论了信号的种类,信号产生的条件和信号的阻塞信号,基本上已经对信号的处理方式有了一定的了解。今天我们继续了解信号的其他内容。四。捕捉信号之前的信号的处理中有提到过捕捉信号,就是通过调用自定义的函数处理信号信号捕捉举例:1. ⽤户程序注册了SIGQUIT信号的处理函数sighandler。2. 当前正在执⾏main函数,这时发⽣中断或异常切换到原创 2016-07-18 00:05:16 · 718 阅读 · 1 评论 -
基于select模型的TCP服务器
之前的一篇博文是基于TCP的服务器和客户机程序,今天在这我要实现一个基于select模型的TCP服务器(仅实现了服务器)。socket套接字编程提供了很多模型来使服务器高效的接受客户端的请求,select就是其中之一。了解select模型我们先来看一下的代码:int iResult = recv(s, buffer,1024);这 是用来接收数据的,在默认的阻塞模式下的套接字里,r原创 2016-07-29 20:36:01 · 9038 阅读 · 1 评论 -
Linux下IO多路转接技术之epoll
在学习linux套接字编程的进阶阶段,写下对epoll的一些自己的见解,当然,大部分是来自网络智慧。一。什么是epoll按照man⼿册的说法:是为处理⼤批量句柄⽽作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel2.5.44),它⼏乎具备了之前所说的⼀切原创 2016-07-30 15:10:21 · 1848 阅读 · 1 评论 -
Shell脚本学习初段--一个进度条程序
相信用过shell脚本的一定会爱上这门脚本语言,因为它实在是很好用。,Shell有⼀种执⾏命令的⽅式称为批处理(Batch),⽤户事先写⼀ 个Shell脚本(Script),其中有很多条命令,让Shell⼀次把这些命令执⾏完,⽽不必⼀条⼀条地敲命令。有时候对于调试代码有很大的帮助。作为一个shell脚本初学者,我还觉得这门语言有很少的语言规则,并且写出来会很高端大气上档次(因为很多都是原创 2016-08-21 21:38:52 · 2548 阅读 · 0 评论 -
IPC之消息队列
实现linux进程通信的方式有5种:--信号(Singal)--管道(Pipe)--消息队列(Message)--信号量(Semaphore) 这些方式各有各的特点。消息队列的存在有原创 2016-07-13 16:30:58 · 850 阅读 · 0 评论 -
malloc内存分配过程详解
说起malloc,但凡对C/C++有点基础的人在编写代码的时候都用过。我们调用malloc接口分配一段连续的内存空间,不使用时使用free可以释放这段内存空间。这些我们都已经比较的熟悉了。但是你知道malloc背后的调用机制吗? C语言程序员都知道,malloc只是C语言库标准提供的一个普通函数,我们实现的malloc和库函数比起来效率要低很多,但是可以通过编写一个简单的malloc来原创 2016-06-15 19:33:06 · 26046 阅读 · 4 评论 -
路由表建立策略(算法)
一。路由表的一些介绍:路由(名词)数据包从源地址到⽬的地址所经过的路径,由⼀系列路由节点组成。路由(动词)某个路由节点为数据报选择投递⽅向的选路过程。路由节点⼀个具有路由能⼒的主机或路由器,它维护⼀张路由表,通过查询路由表来决定向哪个接⼜发送数据包。在Linux环境下可以通过ifconfig和route查看路由表的信息。路由表由很多路由条⽬组成,每个原创 2016-07-23 00:33:19 · 1585 阅读 · 0 评论 -
Linux下的find指令详解
在Linux下有很多查找指令:locatewhereiswhichfind 在这些查找指令中功能最强大的当属find指令了。find命令在目录结构中搜索文件,并执行指定的操作。Linux下find命令提供了相当多的查找条件,功能很强大。即使系统中含有网络文件系统,find命令在该文件系统中同样有效。所以在本片博客中主要讨论find命原创 2016-05-24 17:33:07 · 555 阅读 · 0 评论 -
Linux下C程序的链接过程
今天看到一个很有意思的小程序,它让我对Linux下C程序的编译链接有了一个全新的认识! 这个程序的就是写一个简单的输出“hello World!”: 要求:1.不使用C运行库,写一个独立于任何库的程序。(也就是说我们不能#include)。 2.不适用main函数为程序的入口(大家都知道一般使用了库的程序都是使用main函数作为程序的入口,在这里我们使用自己写的函数nomain作为原创 2016-05-24 15:28:48 · 1147 阅读 · 0 评论 -
操作系统之银行家算法
银行家算法是一种在多道程序系统中避免多个进程并发执行所带来的死锁问题。所谓死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbrace),当进程处于这种状态时,若无外力作用,他们都无法在向前推进。避免死锁的方法:(一)摒弃“请求和保持”条件。(二)摒弃“不剥夺”条件,摒弃。(三)“环路等待”条件等方法。 然而,利用银行家算法,我们可以来检测CPU为进原创 2016-05-24 15:28:07 · 635 阅读 · 0 评论 -
linux下的进程控制块task_struct详解
背景:为了管理进程,操作系统必须对每个进程所做的事情进行清楚地描述,为此,操作系统使用数据结构来代表处理不同的实体,这个数据结构就是通常所说的进程描述符或进程控制块。在linux系统中,这就是task_struct结构,在include\linux\sched.h文件中定义。每个进程都会被分配一个task_struct结构,它包含了这个进程的所有信息,在任何时候操作系统都能原创 2016-05-30 23:25:40 · 728 阅读 · 0 评论 -
Linux下实现一个进度条
本文的题目就是实现一个进度条,进度条的应用在软件中无处不在,拷贝一个文件需要一个进度条,加载一个文件也需要一个进度条,来标志完成与否。 那么 ,一个进度条有哪些元素呢:一个不断向右生长的容器(直观的看出当前的进度)一个数据化反映进度的百分比。一个标志(这个标志反映这个进度条是否在工作,还是卡死)在这里有一些小小的知识点:C语言中缓冲区的刷新方式是以行缓冲刷新的。也就是说,原创 2016-05-31 19:39:11 · 668 阅读 · 0 评论 -
怎样配置Linux下的vim编辑器
vim编辑器是一个强大的文本编辑器。对于一个C/C++初学者来说,可以利用vim编写自己喜欢的代码出来。但是习惯于使用windows下的IDE,初次体验vim真的是糟透了,不同于VS的编程习惯,使用起来及其的不方便,编写代码的效率很低很低。在网上有很多网友都有分享自己的vim配置,以下就是博主根据自己的变成习惯配置的vim编辑器:操作系统环境:CentOS 6.7 (64位) 不同原创 2016-05-26 13:11:10 · 895 阅读 · 0 评论 -
操作系统的常见进程调度算法
先来先服务 (FCFS,first come first served) 在所有调度算法中,最简单的是非抢占式的FCFS算法。 算法原理:进程按照它们请求CPU的顺序使用CPU.就像你买东西去排队,谁第一个排,谁就先被执行,在它执行的过程中,不会中断它。当其他人也想进入内存被执行,就要排队等着,如果在执行过程中出现一些事,他现在不想排队了,下一个排队的就补上。此时如果他又想排队了,只原创 2016-06-11 21:46:59 · 38705 阅读 · 5 评论 -
System V 信号量机制
有三种 IPC我们称作XSI IPC,即消息队列、信号量以及共享存储器(共享内存),这就是我么所说的进程间通信的IPC,有了这些IPC提供给程序的通信接口,实现进程间的通信。 本文主要讨论的是信号量的机制。semget()创建一个新的信号量集,或者存取一个已经存在的信号量集:系统调用:semget();原型:int semget(key_t key,int nsems原创 2016-07-10 23:53:11 · 1099 阅读 · 0 评论 -
Linux grep命令常用参数一览
grep1.作用 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。若不指定任何文件名称,或是所给予的文件名为“-”,则grep指令会从标准输入设备读取数据。2.格式 grep [options]原创 2016-08-13 11:13:10 · 5086 阅读 · 0 评论