Linux 内核和操做系统

1、查看Linux内核版本命令(两种方法):html

一、cat /proc/versionlinux

[root@localhost ~]# cat /proc/version
Linux version 2.6.18-194.8.1.el5.centos.plus (mockbuild@builder17.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Wed Jul 7 11:50:45 EDT 2010面试

二、uname -ashell

[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.18-194.8.1.el5.centos.plus #1 SMP Wed Jul 7 11:50:45 EDT 2010 i686 i686 i386 GNU/Linuxcentos

 

2、查看Linux系统版本的命令(3种方法):

一、lsb_release -a,便可列出全部版本信息:安全

[root@localhost ~]# lsb_release -a
LSB Version: :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID: CentOS
Description: CentOS release 5.5 (Final)
Release: 5.5
Codename: Final网络

这个命令适用于全部的Linux发行版,包括Redhat、SuSE、Debian…等发行版。并发

二、cat /etc/redhat-release,这种方法只适合Redhat系的Linux:dom

[root@localhost ~]# cat /etc/redhat-release
CentOS release 5.5 (Final)函数

三、cat /etc/issue,此命令也适用于全部的Linux发行版。

[root@localhost ~]# cat /etc/issue
CentOS release 5.5 (Final)
Kernel \r on an \m

操做系统都会想它们运行的程序提供各类服务,执行新的程序,打开文件,读文件,分配存储空间,得到当前时间等(通常经过系统调用)。

广义上,操做系统还有内核外的系统调用,基于系统调用的shell(也是一种特殊的应用程序,为其余应用程序提供接口)和库函数(对系统调用的封装),和基于shell,系统调用,库函数(这三个东西基本组成了咱们经常使用的环境)的应用软件。有图以下:

 

在使用linux的man帮助的时候能够指定是查询系统命令仍是系统调用使用man时能够指定不一样的section来浏览,各个section 以下:

1 - commands

2 - system calls

3 - library calls

 

内核是啥?

LINUX is a free unix-like kernel for 386-AT computers, coming with full source code. It is meant for hackers/computer science students to use, learn and enjoy. It is written mostly inC, but parts of it are in gnu-format assembler, and the boot-sequence is in intel 086 assembly language. TheC-code is relatively ANSI, with a few GNU enhancements (mostly__asm__ andinline).

”-其实,linux只是一个主要用c写的内核。

从不一样的角度来看,内核担任的角色不一样。从纯技术角度来看,内核只是软件和硬件的一个中间层,它把从软件发来的请求发送给硬件,完成寻址等操做,还充当了底层驱动。

从应用程序角度来看,内核是对硬件的一个高层次的抽象,应用程序与硬件没有联系,只与内核有联系,内核是应用程序知道的最底层。

从多个并发的进程的角度来看,内核是一个资源管理器,它完成对进程的切换,调度,共享计算机资源(CPU,内存,磁盘,网络等)。

还能够把内核当作一个库,经过系统调用向内核发送各类请求。

内核有什么

这个问题是淘宝面试的时候问个人问题,当时不知道从何下手,简单的总结下。有什么,最简单的就是直接看看内核源代码文件夹下有什么,通常内核文件在linux的目录/usr/src/kernels的文件夹下,我安装的操做系统是redhet的,当时没有安装上内核源文件,并且即便是安装上了也是2.6版本的,也不便于学习,因此下载了一个0.11版本的在http://www.oldlinux.org/index_cn.html上面,1.0版本及以上的可在http://www.kernel.org/pub/linux/kernel/上下载到。

简单看下1.0版本有什么文件主要的:

drivers:驱动代码

fs:文件系统的代码

include :包含文件,这个文件利用其余模块重建内核

init:初始化代码,内核工做的起点  //这里面有内核初始化程序main.c,是内核完成全部初始化工做并进入正常运行的关键

ipc:进程间通讯的相关代码

kernel:主内核的代码 //最重要的是进程调度函数schedule()、sleep_on()函数和有关的系统调用程序

mm:内存管理的代码

net:网络管理的代码

0.11版本的.c文件代码有8578行,而1.0版本里面的.c文件代码大概有14w行,其中drives文件夹下就有7w行,2.6版本的有几百万行,估计那是任何大婶也读不完的~

上面简单的说明了源代码的目录结构,若是从系统的结构来看,linux操做系统能够分红五个比较核心的模块,进程调度模块,内存管理模块,文件系统模块,进程间通讯模块和网络接口模块。其中的内存管理模块用于确保全部的进程可以安全地共享机器主要内存区,同时内存管理模块还支持虚拟内存的管理方式,使得Linux支持进程使用比实际内存空间多的内存容量。文件系统模块用于支持对外部设备的驱动和存储,虚拟文件系统模块经过对向全部的外部存储设备提供一个通用的文件接口,隐藏了各类硬件设备的不一样细节,提升兼容性。下面是操做系统各个模块间的简单关系,虚线和虚框表示0.11上还为实现。

从图中能够看出,全部的模块都与进程调度模块存在依赖关系,由于他们都须要依靠进程调度程序来挂起(暂停)或从新运行它们的进程。还能够根据源代码的结构将内核结构划分红以下的形式:

相关文章
相关标签/搜索