关于对io的一些理解

io的理解

程序是怎样运行的?

程序:就是代码,程序是静态的
程序的运行:一个代码在加在到内存中被cpu执行的一个过程,也就是所谓的进程,进程是动态的。
程序运行状态:内核态和用户态不断的进行交替执行。用户态就是程序在用户空间进行运行,内核态是程序通过系统调用进入到内核态调用内核方法。

为什么会有内核态

这个是操作系统对计算机的一种保护机制,在linux中一切皆文件,所有的物理设备都会映射成文件,如果用户态程序可以直接修改一些系统文件,那么可能会造成计算机的状态不正常(例如无法开机,蓝屏等),所以来说内核为了保护计算机,所以一些方法和文件只能内核完成修改。这就是内核态

我们先看文件io过程

我们都知道java io的read()方法,这个方法是阻塞的方法,当我们调用的输入设备进行输入,当没有数据输入程序就会被阻塞。这个方法的返回值是-1到255,返回-1说明数据读取完毕,其余的数值代表返回的是个字节数据
我么先看一段代码

    public static void main(String[] args)
    {
   
       System.in.read();
    }

我们用系统调用的追踪命令看一下内核的系统调用
strace -ff -o out java FileIoTest (FileIoTest是类名),如下图
在这里插入图片描述
可以看到,内核这里读取文件的时候被阻塞在这里,无法返回到用户态,所以来说就阻断了程序的运行
我们输入一些内容看一下
在这里插入图片描述

在这里插入图片描述

立刻返回程序往下继续执行了:而且内容被拷贝到内核空间去了,长度是3.这就是为啥我们调用这个read()方法时为啥会阻塞,read的第一参数是0,代表是系统的键盘输入,这里也可以看出,系统键盘输入是阻塞的

看下面段代码

public static void main(String[] args)
    {
   
        try {
   
        File file = new File(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值