Linux 操作系统
ojshilu
https://github.com/lucky521
展开
-
Emacs 常用命令
基本命令:C-x C-c : 退出EmacsC-x C-f : 打开一个文件,如果文件不存在,则创建一个文件C-g : 取消未完成的命令###########################################################编辑C-x u 撤销M-d : 删除光标后的词语#################################原创 2013-10-21 10:19:35 · 694 阅读 · 0 评论 -
Belady奇异现象和Thrashing抖动现象的比较
所谓Belady现象是指:采用页面置换FIFO算法时,如果对一个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多,但缺页率反而提高的异常现象。这是一个违反直觉的现象。原因是:所使用的FIFO算法不够好。Thrashing,指的是操作系统的抖动,又叫颠簸。如果分配给进程的存储块数量小于进程所需要的最小值,进程的运行将很频繁地产生缺页中断,这种频率非常高的页面置换现象原创 2014-04-04 19:48:04 · 11094 阅读 · 0 评论 -
epoll的原理和应用- I/O多路复用
网络服务器的传统实现方式是使用每个进程或线程处理一个连接,对于大规模的并发访问来说,这样的效率是不行的。因此推荐的方法是:在一个线程中使用非阻塞IO。 epoll系统调用在linux2.6开始支持,提供了三个函数。epoll_create()创建epoll实例。epoll_ctl()为epoll实例添加或删除描述符。epoll_wait()用于等待特定的原创 2014-04-09 13:52:43 · 1106 阅读 · 2 评论 -
共享内存 Shared Memory - Linux进程间通信
共享内存的机制允许两个或多个进程共享一个给定的内存区域。共享内存,是分配一块能被其他进程访问的内存,实现是通过将内存去映射到共享它的进程的地址空间,使进程间的数据传送不再涉及内核,即进程间通信不需要通过进入内核的系统调用来实现。共享内存与其他的进程间通信最大的优点是:数据的复制只有两次,一次是从输入文件到共享内存区,一次从共享内存区到输出文件。而其他的方式则原创 2014-04-10 11:23:45 · 4468 阅读 · 0 评论 -
命令行参数和变长参数表
命令行参数作为程序的输入数据,原创 2014-04-25 20:36:47 · 992 阅读 · 0 评论 -
生产者-消费者的问题
生产者-消费者问题是最经典的操作系统同步与互斥相结合的wen原创 2014-04-27 18:04:37 · 1177 阅读 · 0 评论 -
线程之间的信号量 Semaphore
同一个进程中不同线程之间的同步可以使用 POSIX Semaphores(其定义在semaphore.h),这个信号量要比进程间通信使用的信号量的结构简单,注意两者是不同的事物。创建信号量对象:sem_t sem_name;很简单的一个变量,其中的sem_t类型也非常简单,下面是其类型定义:typedef volatile unsigned char atomic_ttyp原创 2014-04-13 17:24:30 · 2747 阅读 · 0 评论 -
读取文件中的随机一行 Random Probability
假设有一个文本文件,文件中有若干行。要求返回随机的一行。每行的被选概率相同。两种情况:1、如果文件很大,不能全放入内存2、如果是文件流大文件的特点是不能载入内存随机读取,文件流的特点是只能读取一次。//伪代码i = 1chosen_line = ""while line has next:if random() < 1/i: # random return原创 2014-02-25 10:49:01 · 4002 阅读 · 4 评论 -
TCP的网络连接建立过程
套接字描述符套接字描述符是int类型的。套接字描述符是文件描述符的一种,是UNIX系统中内核对各种类型文件的标识。网络地址结构体sockaddr_in结构体struct sockaddr_in { short sin_family; /* Address family 一般来说 AF_INET(地址族)PF_INET(协议族 )*/原创 2014-04-24 09:43:21 · 1788 阅读 · 1 评论 -
shell登录实现自动交互
每次登录输入密码好麻烦,原创 2014-06-28 12:11:54 · 1240 阅读 · 0 评论 -
Linux下的C语言线程池
线程池的目的是为了减少线程创建、销毁所带来的时空消耗。原创 2014-05-26 13:05:08 · 2067 阅读 · 0 评论 -
vim 常用命令
常用命令:u 撤销##############################################剪切粘贴dd 剪切当前行yy 复制当前行p 粘贴##############################################移动光标hjkl 上下左右 0 到当前行首$ 到当前行尾nG 移动到第n行gg 移动到第一行原创 2013-10-21 10:19:00 · 969 阅读 · 0 评论 -
实现线程读写锁的四种方法
对于某个临界互斥资源,读写锁:当已经被加了读锁时,其他的读模式锁请求仍然可以访问,但是写模式锁不能访问;当写模式锁加锁时,其他的请求都不能访问。原创 2014-05-07 21:19:15 · 13305 阅读 · 3 评论 -
Memcached 理论篇
Memcached 应用非常广泛的一个开源Cache,它是一个在内存中存储key-value的程序,能够以守护进程的形式运行在服务器上,作为数据库到用户之间的缓存。key-value数据全部存储在内存中,不使用硬盘交换区。我决心要学习一下Memcached。因为它在内存管理、海量数据存储、分布式算法、异步事件响应、网络编程方面。对它的学习分为三个部分:理论上、用法上、源码实现上。原创 2014-04-01 15:41:26 · 924 阅读 · 0 评论 -
fork函数的用法总结
fork函数的概念:在Unix操作系统中,fork函数源于。其作用是创建一个子进程。其函数原型为 pid_t fork( void ); · 若调用成功,则会产生一个子进程。因此会返回两个值,子进程内返回0,父进程内返回子进程的ID; · 若调用失败,则父进程返回-1。遇到fork最好要画出进程的树状关系图。父子进程的空间关系: 子进程是父进程原创 2013-10-26 17:41:51 · 2295 阅读 · 0 评论 -
Github 简明用法
如今越来越多的开源项目托管在Github上面,不会用怎么可以呢。本文是一份简明的用法。首先是要对这台机器做配置。第一步:注册账户。注册是免费的并且过程非常简单。注册之后就可以直接在浏览器上编写和管理代码。第三步:在本机上装上git客户端,这样才能和github服务器端保持同步。$ sudo apt-get install git-gui第三步:添加一个SSH原创 2014-03-25 17:15:29 · 937 阅读 · 0 评论 -
Linux进程的状态 Process State
下面是进程状态转换图:原创 2014-04-19 11:47:21 · 3149 阅读 · 0 评论 -
对Linux内存地址转换、保护模式的理解
相关概念:实模式、保护模式、GDT、LDT、物理地址、逻辑地址、线性地址(虚拟地址)实模式Intel 80286时代使用的模式。访问內存是通过segment:offset找到內存的。即“左移4位加偏移”,segment保护模式如今大部分的x86操作系都在保护模式下运行。内存的管理模式分为两种,段模式和页模式访问一个内存地址仍然使用Se原创 2014-03-21 11:17:34 · 1748 阅读 · 0 评论 -
正斜杠与反斜杠
正斜杠与反斜杠,这两个符号,我总是傻傻分不清除。时常会用错,因此今天我要总结一下,防止以后再跌倒。形状区分: 假设一个汉字“八”,正斜杠是左边,反斜杠是右边。使用区分:正斜杠的用武之地:1、除法运算 2/32、Unix操作系统中的路径 /root/etc/3、Web的URL中 http://4、代码注释 //反斜杠的用武之地:原创 2013-10-28 21:39:13 · 1424 阅读 · 0 评论 -
ubuntu linux的root密码忘记了怎么办?
linux的每个用户有自己的密码,操作系统最高权限用户root也有自己的密码。如果用户的密码忘记了,可以通过root进行更改。如果root的密码忘记了,应该怎么办呢?下面就是重置root密码的方法: 1、我的系统是ubuntu 10.04,重启计算机,进到在grub界面。 2、光标移到自己的linux系统,点e进入编辑模式。 3、会看到这样的界面:原创 2013-11-05 19:33:51 · 2152 阅读 · 0 评论 -
内存动态分配函数malloc的基本实现原理
malloc是C语言最常用的标准库函数之一,用于在程序运行中动态地申请内存空间。我们都会使用它,其函数原型为:extern void *malloc(unsigned int num_bytes);那么它是怎么实现的呢?如果让我们自己实现malloc功能的函数,该怎么写? 首先,我们需要知道,操作系统是怎么把一段内存分配给进程的?这当然需要系统调用了。用户态申请分配内原创 2013-11-28 16:01:53 · 9456 阅读 · 0 评论 -
Linux的内存管理机制-概述
内存管理分为两个方面,一个是单个用户进程怎么布局和使用内存空间,这里的内存空间一般是虚拟内存;一个是操作系统内核如何管理内存,这里指的是真实的物理内存。前者是程序员可以考虑的,后者是对程序员彻底透明的,但是我们为了学习操作系统的原理,两个方面都需要理解。 本文只是理论概述,细节上还相当复杂。Linux的虚拟内存管理技术: 对于32位操作系统,每个进程有4G的进程地址原创 2013-10-29 21:59:26 · 1482 阅读 · 0 评论 -
linux常用操作命令手册
本文是我自己生活工作中用到的linux命令的整理,不断更新中。列出大概用法,细节需要重查man。查找文件名:可用正则表达式、可限定文件类型find path -name "*filename*" -type d 复制文件夹 :cp -r ./源目录 ./目的目录复制文件 :cp -r ./源目录/* ./目的目录加 -i 会提示是否覆盖 ;原创 2013-12-03 15:12:33 · 959 阅读 · 0 评论 -
What's the difference between a thread and a process?
What’s the difference between a thread and a process?ProcessEach process provides the resources needed to execute a program. A process has a virtual address space, executable code, open handle原创 2013-12-16 21:21:07 · 1275 阅读 · 0 评论 -
十进制数转换为二进制数
这是个非常基础的问题。一般在计算机引论书籍中的第一章出现。对于十进制数的整数部分,一般使用除2取余法。每次模2取得余数,然后除以2。直到除成0为止。将余数倒置相连就得到整数部分对应的二进制数。除2取余法的理论依据是,整数部分的权值是2的幂数,每次除2都是将整体的权值右移一位,模2是取得最右边的数值。对于十进制数的小数部分,一般使用乘2取整法。不断乘2,如果结果小原创 2014-02-20 20:15:51 · 2019 阅读 · 0 评论 -
简化文件的绝对路径 Simpify Path
在操作系统中,每个文件都有一个绝对路径。并且其最简化的形式是唯一的。对于Unix系列系统,绝对路径是从根路径/开始的,用正斜杠表示。一个句点.表示当前路径,两个句点..表示上一级路径。对于一个路径字符串,从左到右依次读。下面的程序是用来简化Unix文件系统的路径字符串,使其达到最简化的程序,取出中间多余的/或者重复的层次进出。思想:用一个栈来维护绝对路径中从根到文件的纯净的层次次序,去除重原创 2014-02-23 14:37:18 · 3723 阅读 · 0 评论 -
把一个文件创建为文件系统
在Linux系统中,可以把一个文件创建为文件系统,然后挂载到操作系统上。这就成为文件系统中的一个文件系统。可以起来封装隔离或者加密保护的作用。1、创建一个指定大小的全空文件$ dd if=/dev/zero of=file.img bs=1k count=100002、把文件关联成一个循环设备$ losetup /dev/loop0 file.img3、将该循环设备创原创 2014-03-13 15:20:13 · 1206 阅读 · 1 评论 -
Linux输入输出的I/O缓冲
以前写C程序输入输出并没有特意关注过I/O缓冲区的问题。最近在学习fork的时候,发现I/O缓冲区是需要关注的一个细节问题。I/O缓冲区是Unix支持的一项标准,并且得到ISO C标准的支持。其作用: 标准I/O库提供缓冲的目的是尽可能减少外部设备数据读写read和write的次数,从而加快CPU的工作效率。缓冲区的大小: 缓冲区的大小等于外部块设备的一个块长大小时效率原创 2013-10-27 13:31:02 · 1978 阅读 · 0 评论 -
僵尸进程和孤儿进程的比较
在Unix类系统中,这两类进程非常常见。一种叫Zombie,一种叫Orphan。由于名字的关系,容易混淆。Unix的进程关系的机制: unix提供了一种机制可以保证只要父进程想知道子进程结束时的状态信息,就可以得到。 在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。但是仍然为其保留一定的信息(包括进程号the process ID,退出状态th原创 2014-03-19 16:07:36 · 1552 阅读 · 0 评论 -
Linux文件系统中的inode索引结点 VFS inode
Linux中VFS文件系统的组织当我们读取一个文件时,实际上是在目录中找到了这个文件的inode编号,然后根据inode的指针,把硬盘中数据块组合起来,放入内存供进一步的处理。当我们写入一个文件时,是分配一个空闲inode给该文件,将其inode编号记入该文件所属的目录,然后选取空闲的数据块,让inode的指针指向这些数据块,并放入内存中的数据。硬盘扇区 sector原创 2014-03-31 15:22:17 · 3499 阅读 · 0 评论 -
Cache的设计和实现 LRU Cache
Cache的应用非常广泛,其实Cache是一种思想,一个广义的词汇,一种在性能和金钱的权衡上的思想。Cache的思想用在很多地方,使用的载体也不同,都是位于相对高速设备和相对低速设备之间,起到缓存的作用。1、最常用处:用在内存和CPU之间,以SRAM作为Cache的载体。(内存是DRAM,CPU是寄存器)2、用在内存和硬盘之间。3、用在硬盘和网络之间。原创 2014-03-31 09:52:26 · 2618 阅读 · 0 评论 -
看看进程、线程的父子关系
主线程调用pthread_join来等待子线程的结束,然后去ch原创 2014-09-16 18:52:01 · 5541 阅读 · 0 评论