系统调用

20145203 《信息安全系统设计基础》第10周学习总结

血红的双手。 提交于 2020-03-22 21:22:49
20145203 《信息安全系统设计基础》第10周学习总结 视频资源内容 1、ls-l命令可以显示当前工作目录下包含目录或者文件的详细信息。信息包含七列: ①第一列: 第一位:文件类型,-代表文件,d代表目录。 第二、三、四位:代表文件创建者权限,-为无权限,r为可读,w为可写,x为可执行。 第五、六、七位:代表同组用户权限。 第八、九、十位:代表其他用户权限,其中其他用户没有写权限。 ②第二列:文件的目录、子目录数。(目录的该字段至少2) ③第三列:所有者 ④第四列:所属用户组 ⑤第五列:文件大小 ⑥第六列:文件最后修改时间 ⑦第七列:文件名 2、什么是目录? ①目录是一种特殊的文件,它的内容是文件和目录的名字。 ②目录包含很多记录,记录通过结构体定义。 ③每条记录内容代表一个文件或者目录。 ④目录文件至少包含两个特殊项 ‘.’ :代表当前目录 ‘..’ :代表上一级目录 3、man -k: 常用来搜索。例句如下: man -k key1 | grep key2 | grep 2 搜索同时含有k1和k2,且属于系统调用。最后的数字意味着帮助手册中的区段,man手册共有8个区段,最常用的是123,含义如下: 1.Linux 2.系统调用 3.c语言 单独用man语句的时候,想查看其中的单独某个区段内的解释时,例句如下: man 3 printf 即查找c语言中printf的用法。

Java NIO1:I/O模型概述

僤鯓⒐⒋嵵緔 提交于 2020-03-19 02:34:41
I/O模型 在开始NIO的学习之前,先对I/O的模型有一个理解,这对NIO的学习是绝对有好处的。我画一张图,简单表示一下数据从外部磁盘向运行中进程的内存区域移动的过程: 这张图片明显忽略了很多细节,只涉及了基本操作,下面分析一下这张图。 用户空间和内核空间 一个计算机通常有一定大小的内存空间,如一台计算机有4GB的地址空间,但是程序并不能完全使用这些地址空间,因为这些地址空间是被划分为用户空间和内核空间的。 程序只能使用用户空间的内存 ,这里所说的使用是指程序能够申请的内存空间,并不是真正访问的地址空间。下面看下什么是用户空间和内核空间: 1、用户空间 用户空间是常规进程所在的区域,什么是常规进程,打开任务管理器看到的就是常规进程: JVM就是常规进程,驻守于用户空间,用户空间是非特权区域,比如在该区域执行的代码不能直接访问硬件设备。 2、内核空间 内核空间主要是指操作系统运行时所使用的用于程序调度、虚拟内存的使用或者连接硬件资源等的程序逻辑。内核代码有特别的权利,比如它能与设备控制器通讯,控制着整个用于区域进程的运行状态。和I/O相关的一点是: 所有I/O都直接或间接通过内核空间 。 那么,为什么要划分用户空间和内核空间呢?这也是为了保证操作系统的稳定性和安全性。用户程序不可以直接访问硬件资源,如果用户程序需要访问硬件资源,必须调用操作系统提供的接口

JVM实现线程

十年热恋 提交于 2020-03-17 18:35:23
实现线程主要有三种方式:使用内核线程实现,使用用户线程实现和使用用户线程加轻量级进程混合实现。 使用内核线程实现 内核线程(KLT,Kernel-Level Thread),直接由操作系统内核(Kernel,即内核)支持的线程。由内核来完成线程切换,内核通过操纵调度器(Scheduler)对线程进行调度,并负责将线程的任务映射到各个处理器上。每个内核线程可以视为内核的一个分身,这样操作系统就有能力同时处理多件事情,支持多线程的内核叫做多线程内核。 程序一般不会去直接使用内核线程,而是去使用内核线程的一种高级接口——轻量级进程(LWP),即通常意义上的线程*。由于每个轻量级进程都由一个内核线程支持,因此只有先支持内核线程,才能有轻量级进程。*轻量级进程与内核线程之间1:1关系称为一对一的线程模型。 内核线程保证了每个轻量级进程都成为一个独立的调度单元,即时有一个轻量级进程在系统调用中阻塞了,也不会影响整个进程的继续工作。 局限:基于内核线程实现,因此各线程操作等需要系统调用,系统调用代价高,需要在用户态和内核态来回切换,其次,每个轻量级进程都需要一个内核线程的支持,因此轻量级进程要消耗一定的内核资源,如内核线程的栈空间,因此一个系统支持轻量级进程的数量是有限的。 使用用户线程实现 广义上,内核线程以外,就是用户线程。轻量级也算用户线程,但轻量级进程的实现始终是建立在内核上的

【实验】1.Linux系统基本操作

拜拜、爱过 提交于 2020-03-17 10:21:11
用户接口 命令行接口 图形界面接口 程序接口(系统调用接口) 在unix或linux系统中,系统调用以c函数的形式出现。例:fd = open(“file1.c”,2); LInux系统简介 Linux特点 与unix兼容 自由软件,源码公开 性能高,安全性强 便于定制和再开发 互操作性高 全面的多任务和真正的64位操作系统 Linux常用命令 bash命令的一般格式: 命令名 [选项] [参数1] [参数2]… 来源: CSDN 作者: meternaly 链接: https://blog.csdn.net/qq_41100767/article/details/104834164

全虚拟化和半虚拟化的区别 cpu的ring0 ring1又是什么概念? - 转

我的未来我决定 提交于 2020-03-17 06:09:11
http://www.cnblogs.com/xusongwei/archive/2012/07/30/2615592.html ring0是指CPU的运行级别,ring0是最高级别,ring1次之,ring2更次之…… 拿Linux+x86来说, 操作系统(内核)的代码运行在最高运行级别ring0上,可以使用特权指令,控制中断、修改页表、访问设备等等。 应用程序的代码运行在最低运行级别上ring3上,不能做受控操作。如果要做,比如要访问磁盘,写文件,那就要通过执行系统调用(函数),执行系统调用的时候,CPU的运行级别会发生从ring3到ring0的切换,并跳转到系统调用对应的内核代码位置执行,这样内核就为你完成了设备访问,完成之后再从ring0返回ring3。这个过程也称作用户态和内核态的切换。 那么,虚拟化在这里就遇到了一个难题,因为宿主操作系统是工作在ring0的,客户操作系统就不能也在ring0了,但是它不知道这一点,以前执行什么指令,现在还是执行什么指令,那肯定不行啊,没权限啊,玩不转啊。所以这时候虚拟机管理程序(VMM)就要避免这件事情发生。 (VMM在ring0上,一般以驱动程序的形式体现,驱动程序都是工作在ring0上,否则驱动不了设备) 一般是这样做,客户操作系统执行特权指令时,会触发异常(CPU机制,没权限的指令,触发异常),然后VMM捕获这个异常

全虚拟化和半虚拟化的区别 cpu的ring0 ring1又是什么概念? - 转

纵然是瞬间 提交于 2020-03-17 06:08:45
ring0是指CPU的运行级别,ring0是最高级别,ring1次之,ring2更次之…… 拿Linux+x86来说, 操作系统(内核)的代码运行在最高运行级别ring0上,可以使用特权指令,控制中断、修改页表、访问设备等等。 应用程序的代码运行在最低运行级别上ring3上,不能做受控操作。如果要做,比如要访问磁盘,写文件,那就要通过执行系统调用(函数),执行系统调用的时候,CPU的运行级别会发生从ring3到ring0的切换,并跳转到系统调用对应的内核代码位置执行,这样内核就为你完成了设备访问,完成之后再从ring0返回ring3。这个过程也称作用户态和内核态的切换。 那么,虚拟化在这里就遇到了一个难题,因为宿主操作系统是工作在ring0的,客户操作系统就不能也在ring0了,但是它不知道这一点,以前执行什么指令,现在还是执行什么指令,那肯定不行啊,没权限啊,玩不转啊。所以这时候虚拟机管理程序(VMM)就要避免这件事情发生。 (VMM在ring0上,一般以驱动程序的形式体现,驱动程序都是工作在ring0上,否则驱动不了设备) 一般是这样做,客户操作系统执行特权指令时,会触发异常(CPU机制,没权限的指令,触发异常),然后VMM捕获这个异常,在异常里面做翻译,模拟,最后返回到客户操作系统内,客户操作系统认为自己的特权指令工作正常,继续运行。但是这个性能损耗,就非常的大,你想想原来

书写优雅的shell脚本(三) - shell中exec解析

▼魔方 西西 提交于 2020-03-15 08:19:41
  参考:《linux命令、编辑器与shell编程》 《unix环境高级编程》   exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息。 bash shell的命令分为两类:外部命令和内部命令。外部命令是通过系统调用或独立的程序实现的,如sed、awk等等。内部命令是由特殊的文件格式(.def)所实现,如cd、history、exec等等。   在说明exe和source的区别之前,先说明一下fork的概念。   fork是linux的系统调用,用来创建子进程(child process)。子进程是父进程(parent process)的一个副本,从父进程那里获得一定的资源分配以及继承父进程的环境。子进程与父进程唯一不同的地方在于pid(process id)。 环境变量(传给子进程的变量,遗传性是本地变量和环境变量的根本区别)只能单向从父进程传给子进程。不管子进程的环境变量如何变化,都不会影响父进程的环境变量。 shell script: 有两种方法执行shell scripts,一种是新产生一个shell,然后执行相应的shell scripts;一种是在当前shell下执行,不再启用其他shell。

shell中exec解析

﹥>﹥吖頭↗ 提交于 2020-03-15 08:18:13
  参考:《linux命令、编辑器与shell编程》 《unix环境高级编程》   exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息。 bash shell的命令分为两类:外部命令和内部命令。外部命令是通过系统调用或独立的程序实现的,如sed、awk等等。内部命令是由特殊的文件格式(.def)所实现,如cd、history、exec等等。   在说明exe和source的区别之前,先说明一下fork的概念。   fork是linux的系统调用,用来创建子进程(child process)。子进程是父进程(parent process)的一个副本,从父进程那里获得一定的资源分配以及继承父进程的环境。子进程与父进程唯一不同的地方在于pid(process id)。 环境变量(传给子进程的变量,遗传性是本地变量和环境变量的根本区别)只能单向从父进程传给子进程。不管子进程的环境变量如何变化,都不会影响父进程的环境变量。 shell script: 有两种方法执行shell scripts,一种是新产生一个shell,然后执行相应的shell scripts;一种是在当前shell下执行,不再启用其他shell。

[100]shell中exec解析

我是研究僧i 提交于 2020-03-15 08:17:12
参考:《linux命令、编辑器与shell编程》 《unix环境高级编程》 本地变量可以理解为 局部变量 , 参考:shell基础 参考 bash shell的命令分为两类:外部命令和内部命令。 内部命令是由特殊的文件格式(.def)所实现,如cd、history、exec,source等等。 外部命令是通过系统调用或独立的程序实现的,如sed、awk等。 set: 命令作用主要是显示系统中已经存在的shell变量,以及设置shell变量的新变量值。 env: 环境变量 fork: 完成linux系统调用 fork是linux的系统调用,用来创建子进程(child process)。 子进程是父进程(parent process)的一个副本,从父进程那里获得一定的资源分配以及继承父进程的环境。 子进程与父进程唯一不同的地方在于pid(process id)。 本地变量和环境变量的本质区别 环境变量(传给子进程的变量,遗传性是本地变量和环境变量的根本区别)只能单向从父进程传给子进程。不管子进程的环境变量如何变化,都不会影响父进程的环境变量。 执行shell的2种方法 shell script: 有两种方法执行shell scripts, 一种是新产生一个shell,然后执行相应的shell scripts;执行脚本. 一种是在当前shell下执行,不再启用其他shell。

网络socket多进程编程之服务器

ぃ、小莉子 提交于 2020-03-10 18:40:12
文章目录 fork系统调用 网络socket多进程编程之服务器代码示例 在写多进程编程之前,我们先了解一下fork系统调用。 fork系统调用 ①Linux内核在启动的最后阶段会创建init进程来执行序/sbin/init,该进程是系统运行的第一个进程,进程号为 1,称为Linux 系统的初始化进程,该进程会创建其他子进程来启动不同写系统服务,而每个服务又可能创建不同的子进程来执行不同的程序。Linux 中维护着一个数据结构叫做 进程表,保存当前加载在内存中的所有进程的有关信息,其中包括进程的 PID(Process ID)、进程的状态、命令字符串等,操作系统通过进程的 PID 对它们进行管理,这些 PID 是进程表的索引。 ②Linux下有两个基本的系统调用可以用于创建子进程:fork()和vfork()。在我们编程的过程中,一个函数调用只有一次返回(return),但由于fork()系统调用会创建一个新的进程,这时会有两次返回。一次返回是给父进程,其返回值是子进程的PID(Process ID),第二次返回是给子进程,其返回值为0。所以我们在调用fork()后,需要通过其返回值来判断当前的代码是在父进程还是子进程运行,如果返回值是0说明现在是子进程在运行,如果返回值>0说明是父进程在运行,而如果返回值<0的话,说明fork()系统调用出错。fork 函数调用失败的原因主要有两个