Linux 网络编程(一)--Linux操作系统概述
一、Linux的内核版本
Linux内核的编号采用如下编号形式:
主版本号.此版本号.主补丁号.次补丁号
例如:2.6.26.3
第一个数字”2”是主版本号,表示第2大版本。
第二个数字”6”是此版本号,表示是Linux内核大版本的第6个小版本,同时因为6是偶数表示为发布版本,(若为奇数,表示测试版)。
第三个数字“26”是主版本补丁号,表示指定小版本的第26个补丁包。
第四个数字“3”是此版本补丁包,表示次补丁号的第3个小补丁。
二、Linux的系统架构
Linux系统从应用角度来看,分为内核空间和用户空间两个部分。其中,内核主要由进程调度、内存管理、虚拟文件系统、网络接口和进程间通信5个子系统组成。
1.进程调度SCHED
进程调度指的是系统对进程的多种状态之间转换的策略。Linux下的进程调度有3种策略:SCHED_OTHER、SCHED_FIFO和SCHED_RR。
SEHED_OTHER是用于针对普通进程的时间片轮转调度策略。这种策略中,系统给所有的运行状态的进程分配时间片,在当前进程的时间片用完之后,系统从进程中优先级最高的进程中选择进程运行。
SEHED_FIFO是针对运行的实时性要求比较高、运行时间比较长的进程调度策略。这种策略中,系统按照进入队列的先后进行进程的调度,在没有更高优先级进程到来或者当前进程没有因为等待资源而阻塞的情况下,会一直运行。
SCHED_RR是针对实时性要求比较高、运行时间比较长的进程调度策略。这种策略与SCHED_OTHER的策略类似,只不过SCHED_RR进程的优先级要高得多,系统分配给SCHED_RR进程时间片,然后轮询运行这些进程,将时间片用完的进程放入队列的末尾。
由于存在多种调度方式,Linux进程调度采用的时“有条件剥夺”的调度方式。普通进程中采用的是SCHED_OTHER的时间片轮询方式,实时进程可以剥夺普通进程。如果普通进程在用户空间运行,则普通进程立即停止运行,将资源让给实时进程;如果普通进程运行在内核空间,需要等系统调用返回用户空间方可剥夺资源。
2.内存管理MMU
内存管理是多个进程见得内存共享策略。在Linux系统中,内存管理的主要概念是虚拟内存。虚拟内存可以让进程拥有比实际物理内存更大的内存,可以是实际内存的很多倍。每个进程的虚拟内存有不同的地址空间,多个进程的虚拟内存不会冲突。
虚拟内存的分配策略是每个进程都可以公平地使用虚拟内存。虚拟内存的大小通常设置为物理内存的两倍。
3.虚拟文件系统VFS
在Linux下支持多种文件系统,如ext、ext2、minix、umsdos、msdos、vfat 、ntfs、proc、smb、ncp、iso9660、sysv、hpfs、affs等。目前Linux下最常用的文件格式是ext2和ext3。ext2文件系统用于固定文件系统和可活动文件系统,是ext文件系统的扩展。ext3文件系统是在ext2上增加日志功能后的扩展。它兼容ext2文件系统,两种文件系统之间可以互相转换,ext2不用格式化就可以转换为ext3文件系统,而ext3文件系统转换为ext2文件系统也不会丢失数据。
4.网络接口
Linux支持多种网络接口和协议。网络接口分为网络协议和驱动程序,网络协议是一种网络传输的通信标准,而你网络驱动则是硬件设备的驱动程序。Linux支持的网络设备多种多样,几乎目前所有网络设备都有驱动程序。
5.进程间通信
Linux下的进程间通信方式主要有管道方式,信号方式,消息队列方式,共享内存方式和套接字等方法。
三、Linux的文件结构
Linux是将整个文件系统表示成树状的结构,Linux系统每增加一个文件系统都会将其加入到这个树中。操作系统文件结构的开始,只有一个单独的顶级目录结构,叫做根目录。所有一切都从“根”开始,用“/”代表,并且延伸到子目录。
下面是Linux一些常用目录的作用:
“/etc”:包括绝大多数Linux系统引导所需要的配置文件,系统引导时读取配置文件,按照配置文件的选项进行不同情况的启动。
“/lib”:包含C编译程序需要的函数库,是一组二进制文件。例如:glibc。
“/var”:包含系统定义表,以便在系统运行改变时可以只备份该目录,如cache。
“/tmp”:存放临时性的存储。
“/bin”:大多数命令存放在这里。
“/home”:主要存放用户账户,并且可以支持ftp的用户管理。系统管理员智能机用户是,系统在home目录下创建于用户同名的目录,此目录下一般默认有Desktop目录。
“/dev”:存放一种设备文件的特殊文件,如fd0,had等。
“/mnt”:在Linux系统中,它是专门给外挂的文件系统使用的,里面有两个文件cdrom、floopy,登录光驱、软驱是会用到。
“/usr”:包括所有其它内容,如src、local。Linux的内核就在/usr/src中。其下有子目录/bin,存放所有安装语言的命令,如gcc,perl等。
注:在DOS/Windows下使用的是反斜杠“\”,而在Linux下使用的是斜杠“/”,注意区别。
Linux 网络编程(一)--Linux操作系统概述的更多相关文章
- Linux 网络编程(IO模型)
针对linux 操作系统的5类IO模型,阻塞式.非阻塞式.多路复用.信号驱动和异步IO进行整理,参考<linux网络编程>及相关网络资料. 阻塞模式 在socket编程(如下图)中调用如下 ...
- linux网络编程-(socket套接字编程UDP传输)
今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中, ...
- Linux网络编程&内核学习
c语言: 基础篇 1.<写给大家看的C语言书(第2版)> 原书名: Absolute Beginner's Guide to C (2nd Edition) 原出版社: Sams 作者: ...
- linux网络编程_1
本文属于转载,稍有改动,以利于学习. (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个 ...
- Linux网络编程入门 (转载)
(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...
- [转] - Linux网络编程 -- 网络知识介绍
(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...
- 【转】Linux网络编程入门
(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...
- linux网络编程九:splice函数,高效的零拷贝
from:http://blog.csdn.net/jasonliuvip/article/details/22600569 linux网络编程九:splice函数,高效的零拷贝 最近在看<Li ...
- 《转》Linux网络编程入门
原地址:http://www.cnblogs.com/duzouzhe/archive/2009/06/19/1506699.html (一)Linux网络编程--网络知识介绍 Linux网络编程-- ...
- 服务器编程入门(4)Linux网络编程基础API
问题聚焦: 这节介绍的不仅是网络编程的几个API 更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系. 这节主要介绍三个方面的内容:套接字( ...
随机推荐
- SQL 基础学习(1):下载DB Browser for SQLite. 下载graphviz(为了使用Rails ERD的前提)出现❌,已debug.
SQL is a standard language for storing, manipulating and retrieving data in databases. 关系型数据库:RDBMS( ...
- git add * 提示warning: LF will be replaced by CRLF in 解决办法
在使用git的时候,每次执行 $ git add * 都会提示这样一个警告消息: 虽然说没有什么影响吧. 不过就是觉得太碍眼了, 按照这样设置就没有问题了: git config core.autoc ...
- ROM、RAM、CPU、CACHE、FLASH的区别
内存一般采用半导体存储单元,包括随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE).只不过因为RAM是其中最重要的存储器,所以通常所说的内存即指电脑系统中的RAM. RAM要求每时 ...
- 教你函数如何传参更加方便 ----python 传参 *args **kwargs
*args 和 **kwargs 可以将不定数量的参数传递给函数 *args 和 **kwargs,前者适用于 传入非键值对的可变数量的参数列表,后者适用于 传入不定长度的键值对, 作为参数传递给函 ...
- jsp页面输出当前时间
<% out.print(new java.text.SimpleDateFormat("yyyy年MM月dd号 hh:mm:ss").format(new Date())) ...
- MySQL常用的七种表类型(转)
MySQL常用的七种表类型(转) 其实MySQL提供的表类型截至到今天已经有13种,各有各的好处,但是民间流传的常用的应该是7种,如果再细化出来,基本上就只有两种:InnoDB.MyIASM两种. ...
- NPM 报错--fs: re-evaluating native module sources is not supported. If you are using the graceful-fs module
fs: re-evaluating native module sources is not supported. If you are using the graceful-fs module 解决 ...
- Form表单发送到服务器时的编码方式
---恢复内容开始--- 表单中的表单中enctype是设置表单的MIME编码. 所谓MIME编码,是指当服务器传送数据给客户端时,必须指定这个文件是什么类型,才能方便客户端调用相应的应用软件来打开该 ...
- JRebel springboot部署idea
JRebel springboot部署idea http://127.0.0.1:8888/88414687-3b91-4286-89ba-2dc813b107ce ctrl+shift+ ...
- web前端学习python之第一章_基础语法(一)
web前端学习python之第一章_基础语法(一) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...