linux
文件操作
一切的一切都是文件,林格斯说:linux核心就是4个操作(open,close,read,write)和ioctl
ioctl :把控制信息传给设备驱动程序
Linux环境
||
终端
||
数据管理
模块化内存管理和linux内存管理
进程和信号
定义: 一个其中运行着一个或多个线程的地址空间和这些线程所需要的资源
通俗理解:正在运行的程序
$ grep trek.txt
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
501 18387 18382 0 11:13上午 ttys001 0:00.00 grep trek.txt
$ grep trek2.txt
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
501 18404 18382 0 11:16上午 ttys001 0:00.00 grep trek2.txt
POSIX线程
线程是一个进程内部的一个控制序列
- 当进程执行fork调用时,将创建的该进程的一份新副本,这个新进程拥有自己的变量和自己的pid,它的时间调度也是独立的,它的执行几乎完全独立于父进程
- 进程中创建一个新线程时,新的执行线程将用友自己的栈,与它的创建者共享全局变量、文件描述、信号处理函数、当前目录状态
进程间通信
当从一个进程连接数据流到另一个进程时,使用管道(pipe),通常是把一个进程的输出通过管道连接到另一个进程的输入
信号量
所有程序使用线程时,程序中存在着一个部分临界代码,我们需要确保只有一个进程(或者一个执行线程)可以进入这个临界代码并拥有对资源独立访问权。我们可以在试用线程的程序中通过互斥量和信号量来控制对临界区域的访问。
- 共享内存
两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间传递数据的一种非常有效的方式。把不同进程之间共享的内存安排为同一段物理内存。
- 消息队列
提供一种在两个不相关的进程之间传递数据相当简单有效的方法。与管道相比,消息队列优势在于它独立于发送和接收进程的存在。
- 共享内存
套接字(socket)
套接字(socket)是一种通信机制,客户端和服务器可以在本机进行,可以跨网络进行。如ftp 、remotelogin、打印机
- 不能共享内存
服务器调用系统socket来创建的套接字,是系统分配给服务器进程的资源。
套接字包括:域、类型、协议
- 域(domain)
- AF_INET
- IP地址
- 类型(type)
- 两种通信机制:流
(stream)
和数据报(datagram)
- 流提供的是一个有序、可靠、双向字节流的连接。发送的数据可以确保不会丢失、复制、乱序,并且大的消息会被分片传输、重组。
TCP
- 数据报相反,不建立和维持一个连接。它对可以发送的数据报的长度有限制,数据报作为一个单独的网络消息被传输,它可能会丢失。复制、乱序。
UDP
- 两种通信机制:流
- 协议(protocol)
- 底层的传输机制不止一个协议来提供要求的套接字类型
- 域(domain)