
【Unix/Linux】
空空的司马
微信搜『程序员加油站』,回复『pdfs』获取优质电子书
展开
-
Unix系统编程(2) - 文件系统
文件系统需要解答以下两个问题:1 文件系统在内核中时如何实现的?如何呈现给用户一个树状的目录结构?如何处理用户的文件和目录操作请求?2 磁盘是一种顺序的存储介质,一个树状的目录结构如何存到磁盘上?怎样设计文件系统的存储格式使访问磁盘的效率最高?各种文件和目录操作在磁盘上的实际效果是什么?在Windows系统中一般我们使用的是NTFS文件系统(早期的windows中使用的时FAT32系统)。目前原创 2016-05-31 19:15:58 · 1998 阅读 · 0 评论 -
Java网络编程 - 同步阻塞IO模型
由于项目需要使用Java开发后台服务器程序,C/C++程序员就要学学Java了。Unix/Linux下的几种网络IO模型在之前的博客中已经提及到,但是使用的大多数都是Unix/Linux下的系统调用。 博客内容大多数来自网络资料以及书籍《Netty权威指南》,转载请注明出处,谢谢!如果想了解Unix/Linux下网络IO模型的可以看如下的几篇相关博客,里面大多都是代码段,原理性的讲解比较少。原创 2017-01-12 16:07:16 · 2372 阅读 · 0 评论 -
linux高级编程基础系列:线程间通信
线程间通信机制:线程是一种轻量级的进程。进程的通信机制主要包括无名管道、有名管道、消息队列、信号量、共享内存以及信号等。这些机制都是由linux内核来维护的,实现起来都比较复杂,而且占用大量的系统资源。线程间的通信机制实现起来则相对简单,主要包括互斥锁、条件变量、读写锁和线程信号等。本文会对以上所涉及的线程间的通信机制一一展开。互斥锁通信机制1、互斥锁基本原理:互斥锁以排他的方式防止数据被并转载 2016-08-26 10:54:37 · 1109 阅读 · 0 评论 -
Unix系统编程(8) - I/O多路复用之epoll(Linux)
1. epoll的由来epoll是在Linux 2.6.28内核提出的,是select和poll的强化升级版本。相比select和poll,epoll更灵活,没有描述符限制。epoll在Unix中是没有的。 epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。2. epoll的使用Linux 2.6.28之后原创 2016-07-19 15:58:10 · 1442 阅读 · 0 评论 -
Unix/Linux下5种I/O模型
1. 五种I/O模型在网络编程,经常接触下述的I/O相关的概念:同步(Synchronous)异步(Asynchronous)阻塞(Blocking)非阻塞(Non-blocking)信号驱动(Signal driven)他们之间的关系如下图: 引用网上一个比喻: 你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下”,然后开始原创 2016-07-26 17:39:59 · 1249 阅读 · 0 评论 -
Unix系统编程(6) - I/O多路复用之select
1. I/O多路复用基本思路I/O多路复用就是让应用程序可以同时对多个I/O端口进行监控以判断其上的操作是否可以进行,达到时间复用的目的。由于I/O多路复用是在单一进程的上下文中的,因此每个逻辑流程都能访问该进程的全部地址空间,所以开销比多进程低得多。由于I/O多路复用都是在单一进程中进行的,所以不会出现多线程中的线程不安全的问题。2. select模型在man page中给出的select函数原型原创 2016-07-17 15:19:14 · 1405 阅读 · 0 评论 -
Unix系统编程(5) - 多线程并发服务器
1. 多线程 & 多进程线程是进程内的独立执行实体和调度单元。又称为“轻量级”进程。创建线程比创建进程要快10~100倍(数据待考证),又因为一个进程下的所有线程都共享一些内核资源,相比多进程并发服务器来说,多线程并发服务器在节省资源上比多进程并发服务器更有优势。 线程共享资源与独占资源如图: 多线程下并发服务的模型与多进程下基本一致,多线程并发服务器总是让主线程处于阻塞监听状态。一旦有原创 2016-07-16 08:48:56 · 1381 阅读 · 0 评论 -
Unix系统编程(4) - 多进程并发服务器
1. 迭代服务器 & 并发服务器服务器按照 处理方式 来看可以分为: - 迭代服务器 迭代服务器只能一次处理一个客户的请求。也就是说在服务器响应一个客户请求时,如果有另一个客户发起请求是不能得到及时响应的。下图是一个典型的迭代服务器处理流程。 - 并发服务器 并发服务器则能同时处理多个客户端请求。下图是一个基于多进程模型的并发服务器处理流程。 2. 多进程并发服务器1原创 2016-07-14 20:42:20 · 1774 阅读 · 0 评论 -
Unix系统编程(7) - I/O多路复用之poll
poll的机制与select类似,与select在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制。 poll和select同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大。服务端代码下载:#include <stdio.h原创 2016-07-19 15:38:04 · 1397 阅读 · 0 评论 -
Unix系统编程(1) - 文件IO
Unix系统可用的文件IO函数包括打开文件、读文件、写文件等等。1、文件描述符 对于内核来说,所有打开文件都通过文件描述符引用。文件描述符是一个非负的整数,当打开一个现有的文件或者创建一个文件的时候,内核向进程返回一个文件描述符。当读写一个文件时,使用open或create返回文件描述符标识该文件,将其作为参数传给read或write。POSIX标准程序中0,1,2分别表示标准输入,标准输出,原创 2016-05-21 15:45:02 · 1847 阅读 · 0 评论 -
Unix系统编程(3) - 进程
1、进程1.1 进程Linux操作系统中,在系统内核中为每一个进程对应一个PCB(进程控制块)用来维护该进程。进程控制块是用结构体task_struct来定义的。 该结构体中有这些主要的信息: 1. 进程id 2. 进程状态(运行,就绪,睡眠,停止) 3. 进程切换时需要保存和恢复的一些CPU寄存器 4. 描述虚拟地址空间信息 5. 描述控制终端信息 6. 当前工作目录 7. um原创 2016-06-29 12:04:54 · 712 阅读 · 0 评论 -
Unix系统编程(工具篇) - Makefile
1.Makefile的作用1 项目代码管理编译2 节省编译项目时间在不使用Makefile编译的时候不免都要在终端下输入:gcc -o app a.c b.c c.c d.c诸如此类的命令,反复的输入这类命令很浪费时间,然而有了Makefile之后复杂的命令就变成了make一个命令了。同时合适的Makefile会根据源码是否修改来决定是否重新编译源文件。3 一次编写终生受益 写得好的Mak原创 2016-06-11 15:12:07 · 1040 阅读 · 0 评论 -
Java网络编程 - 非阻塞IO模型
1. Java NIO简介NIO(Non-Block I/O)是在JDK1.4之后引入的。NIO弥补了同步阻塞I/O的缺点。提供了高速、面向块的I/O。 在NIO库中,所有的数据都是用缓冲区来处理的,在读取数据的时候,他是直接读到缓冲区中的:在写数据时,写到缓冲区中。任何时候访问NIO中的数据都是通过缓冲区进行操作。 Java NIO由三个核心部分组成,Buffers, Channel和Sele原创 2017-05-22 21:14:32 · 1574 阅读 · 0 评论