Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理

Linux内核设计的艺术
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者:
出版社: 机械工业出版社
2011-06
版次: 1
ISBN: 9787111347446
定价: 79.00
装帧: 平装
开本: 16开
纸张: 胶版纸
页数: 444页
正文语种: 简体中文
  •   关于Linux内核的书已经不计其数,但这本书却是独树一帜的,它的内容代表着Linux内核研究成果的世界顶尖级水平,它在世界范围内首次提出并阐述了操作系统设计的核心指导思想——主奴机制,这是所有操作系统研究者的一笔宝贵财富。本书可能也代表着同类图书的顶尖水平,是一本真正能引导我们较为容易地、极为透彻地理解Linux内核的经典之作,也可能是当前唯一能从本质上指引我们去设计和开发拥有自主知识产权的操作系统的著作。它的出版也许会成为Linux内核研究领域的一个里程碑事件。
      《Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》的最大特点是它的写作方式和内容组织方式,与同类书完全不同。它在深刻地分析了传统讲解方法的利弊之后,破旧立新,从认知学的角度开创了一种全新的方式。以操作系统的真实运行过程为主线,结合真实的内核源代码、349幅精确的内核运行时序图和具有点睛之妙的文字说明,对操作系统从开机加电到系统完全准备就绪的整个过程进行了系统而完整地分析,深刻地揭示了其间每一个动作的设计意图和实现原理,完美地再现了操作系统设计者的设计思路。阅读本书就如同跟随着操作系统设计者一起去思考,我们会在阅读的过程中发现Linux内核设计的精妙,会发现原来处处都“暗藏玄机”,哪怕是一行很短的代码。
      《Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》在所有细节上都力求完美。为了保证知识的准确性,操作系统运行过程中的每个动作都经过了严格的考证;为了让我们真正理解Linux内核的原理,它突破传统,以Linux的真实运行过程为主线进行讲解;为了做到真正易于理解,创新性地使用了图解的方式,精心绘制了349幅分辨率600dpi的时序图,图中表现的运行时结构和状态与操作系统实际运行时的真实状态完全吻合;为了提高阅读体验,本书采用了双色印刷,以便于我们更清楚地观察每一幅图中的细节。 新设计团队始于世纪之交,不断发展、优胜劣汰、适者生存、自然形成。
    团队始终不自量力地奉行高举高打的策略,只对计算机领域中基础的、有体系的事情感兴趣,且只做自己感兴趣的事。
    团队不相信二流水平、三流心态,能作出世界顶级的工作。团队相信成功的决定因素是人,而不是物。
    团队对艺术、对鉴赏力、对欣赏品味、对一切美好的事物都有着近乎狂热的追求。认为科学、技术的最高境界是艺术,认为世界的本源是通的。
    团队崇尚理论体系、崇尚个性鲜明、崇尚独立思考。“没体系”是团队成员之间善意贬损的常用语,也是判断一件事是否值得关注的标准之一。
    团队鄙视抄袭、弄虚作假。对别人热炒、做熟的事情不感兴趣,更不喜欢在别人的体系上狗尾续貂、移花接木,粉饰为“自主创新”。
    团队强调理论,注重实践,讲究科学的研究方法,不屈膝权威,不迷信盲从。提出基础假设,构建逻辑自洽的体系,证伪、修正、再证伪、再修正,不断推进体系的完善。
    团队钻研学术,但决不死板,学术和商业结合,彼此互为推进,最终改变整个时代的商业格局,是团队追求的目标。
    团队特别注重诚信,提倡公平、公正。
    团队内部是一方净土,既相互竞争,又相互帮助、相互协作。团队成员都在高高兴兴做自己喜欢的、感兴趣的事,没有时间顾及其他。勾心斗角、尔虞我诈、溜须拍马、拉帮结派……,在团队内部没有市场。
    团队在上述思想的指导下,研发了基于图形、图像(而非基于字符、语句)的图示化程序设计集成开发环境,已成功的移植了linux0.11,正确编译,正确boot,正确运行。现在正在研发新的操作系统,已初步实现了与现有的基于块概念的文件系统有较大差异的新的文件系统,据我们测试,相对于基于块设备的文件系统,在文件的读写速度上有较大优势。《Linux内核设计的艺术》一书,体现了我们设计新操作系统的过程中,对操作系统的理解。可能在不久的将来,我们也将我们在设计图示化程序设计平台中,对编译原理的理解,奉献给广大读者。 本书导读
    前言
    第1章 从开机加电到执行main函数之前的过程
    1.1 启动BIOS,准备实模式下的中断向量表和中断服务程序
    1.1.1 BIOS的启动原理
    1.1.2 BIOS在内存中加载中断向量表和中断服务程序
    1.2 加载操作系统内核程序并为保护模式做准备
    1.2.1 加载第一部分代码—引导程序(bootsect)
    1.2.2 加载第二部分代码—setup7
    1.2.3 加载第三部分代码—system模块
    1.3 开始向32位模式转变,为main函数的调用做准备
    1.3.1 关中断并将system移动到内存地址起始位置0x00000
    1.3.2 设置中断描述符表和全局描述符表
    1.3.3 打开A20,实现32位寻址
    1.3.4 为在保护模式下执行head.s做准备
    1.3.5 head.s开始执行
    1.4 本章小结
    第2章 从main到怠速
    2.1 开中断之前的准备工作
    2.1.1 复制根设备号和硬盘参数表 
    2.1.2 物理内存规划格局
    2.1.3 虚拟盘设置与初始化
    2.1.4 内存管理结构mem_map初始化
    2.1.5 异常处理类中断服务程序挂接
    2.1.6 初始化块设备请求项结构
    2.1.7 与建立人机交互界面相关的外设的中断服务程序挂接
    2.1.8 开机启动时间设置
    2.1.9 系统开始激活进程
    2.1.10 进程相关事务初始化设置
    2.1.11 时钟中断设置
    2.1.12 系统调用服务程序挂接
    2.1.13 初始化缓冲区管理结构
    2.1.14 初始化硬盘
    2.1.15 初始化软盘
    2.1.16 开中断
    2.2 进程创建的最基本动作
    2.2.1 操作系统为进程0创建进程1做准备
    2.2.2 在进程槽中为进程1 申请一个空闲位置并获取进程号
    2.2.3 复制进程信息之前,先将一些数据压栈
    2.2.4 初步设置进程1管理结构
    2.2.5 进程0创建进程1的过程中发生时钟中断
    2.2.6 从时钟中断返回
    2.2.7 调整进程1管理结构
    2.2.8 设置进程1的线性地址空间及物理页面
    2.2.9 继续调整进程1管理结构
    2.2.10 操作系统如何区分进程0和进程
    2.2.11 进程0准备切换到进程
    2.2.12 系统切换到进程1执行
    2.3 加载根文件系统
    2.3.1 进程1如何开始执行
    2.3.2 进程1开始执行
    2.3.3 进程1开始以数据块的形式操作硬盘
    2.3.4 将找到的缓冲块与请求项挂接
    2.3.5 将请求项与硬盘处理函数挂接
    2.3.6 进行硬盘读盘前的准备工作
    2.3.7 给硬盘下达读盘指令
    2.3.8 进程1由于等待读盘操作挂起
    2.3.9 系统切换到进程0执行
    2.3.10 进程0的执行过程
    2.3.11 进程0执行过程中发生硬盘中断
    2.3.12 硬盘中断服务程序响应后,进程0继续执行
    2.3.13 再次响应硬盘中断并唤醒进程
    2.3.14 读盘操作完成后,进程1继续执行
    2.3.15 进程1继续设置硬盘管理结构
    2.3.16 进程1获取软盘超级块,为加载根文件系统做准备
    2.3.17 进程1备份超级块数据
    2.3.18 进程1将根文件系统从软盘拷贝到虚拟盘
    2.3.19 进程1开始加载根文件系统
    2.3.20 进程1准备加载根文件系统超级块
    2.3.21 进程1加载根文件系统超级块
    2.3.22 进程1继续加载根文件系统
    2.3.23 进程1准备读取根目录i节点
    2.3.24 进程1加载根目录i节点
    2.3.25 进程1结束加载根文件系统的过程
    2.4 打开终端设备文件及复制文件句柄
    2.4.1 进程1与内核文件表挂接,为打开文件做准备
    2.4.2 确定打开操作的起点
    2.4.3 获得枝梢i节点—dev目录文件的i节点
    2.4.4 确定dev目录文件i节点为枝梢i节点
    2.4.5 继续返回枝梢i节点
    2.4.6 查找tty0文件的i节点
    2.4.7 将tty0设备文件的i节点返回给sys_open系统调用 
    2.4.8 分析tty0文件i节点
    2.4.9 设置文件管理结构并返回给用户进程
    2.4.10 进程1复制tty0文件句柄
    2.4.11 进程1继续复制tty0文件句柄
    2.5 创建进程
    2.5.1 进程1准备创建进程
    2.5.2 复制进程2管理结构并进行调整
    2.5.3 设置进程2的页目录项并复制进程2的页表
    2.5.4 调整进程2管理结构中与文件有关的内容
    2.5.5 进程1执行过程中发生时钟中断
    2.5.6 进程1从时钟中断返回,准备切换到进程
    2.6 进程1等待进程2退出
    2.6.1 进程1查找它自己的子进程
    2.6.2 对进程2的状态进行处理
    2.6.3 切换到进程2执行
    2.7 shell程序的加载
    2.7.1 进程2开始执行
    2.7.2 为打开/etc/rc文件做准备
    2.7.3 进程2打开“/etc/rc”配置文件
    2.7.4 通过压栈为加载shell文件做准备
    2.7.5 为参数和环境变量设置做准备
    2.7.6 得到shell文件的i节点
    2.7.7 为加载参数和环境变量做准备
    2.7.8 根据i节点,对shell文件进行检测
    2.7.9 检测shell文件头
    2.7.10 备份文件头并进行分析
    2.7.11 对shell文件进行进一步分析
    2.7.12 拷贝参数和环境变量
    2.7.13 调整进程2的管理结构
    2.7.14 继续调整进程2管理结构
    2.7.15 释放进程2继承的页面
    2.7.16 检测协处理器
    2.7.17 调整shell程序所在的线性空间地址
    2.7.18 为shell程序准备参数和环境变量
    2.7.19 继续调整进程2管理结构
    2.7.20 调整EIP,使其指向shell程序入口地址
    2.7.21 shell程序执行引发缺页中断
    2.7.22 缺页中断中shell程序加载前的检测
    2.7.23 为即将载入的内容申请页面
    2.7.24 将shell程序载入新获得的页面
    2.7.25 根据shell程序的情况,调整页面的内容
    2.7.26 将线性地址空间与程序所在的物理页面对应
    2.8 系统实现怠速
    2.8.1 shell进程准备创建update进程
    2.8.2 进程2开始执行/etc/rc文件
    2.8.3 准备加载update进程
    2.8.4 update进程的作用
    2.8.5 shell程序检测“/etc/rc”文件
    2.8.6 shell进程退出
    2.8.7 shell进程退出善后处理
    2.8.8 进程1清理shell进程管理结构
    2.8.9 系统开始重建shell
    2.8.10 shell进程为何不会再次退出
    2.9 小结
    第3章 安装文件系统
    第4章 文件操作
    第5章 用户进程与内存管理
    第6章 多个进程“同时”操作一个文件
    第7章 IPC问题
    第8章 操作系统的设计指导思想
    结束语
    “新设计团队”简介
    附录 搭建Linux 0.11系统环境
  • 内容简介:
      关于Linux内核的书已经不计其数,但这本书却是独树一帜的,它的内容代表着Linux内核研究成果的世界顶尖级水平,它在世界范围内首次提出并阐述了操作系统设计的核心指导思想——主奴机制,这是所有操作系统研究者的一笔宝贵财富。本书可能也代表着同类图书的顶尖水平,是一本真正能引导我们较为容易地、极为透彻地理解Linux内核的经典之作,也可能是当前唯一能从本质上指引我们去设计和开发拥有自主知识产权的操作系统的著作。它的出版也许会成为Linux内核研究领域的一个里程碑事件。
      《Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》的最大特点是它的写作方式和内容组织方式,与同类书完全不同。它在深刻地分析了传统讲解方法的利弊之后,破旧立新,从认知学的角度开创了一种全新的方式。以操作系统的真实运行过程为主线,结合真实的内核源代码、349幅精确的内核运行时序图和具有点睛之妙的文字说明,对操作系统从开机加电到系统完全准备就绪的整个过程进行了系统而完整地分析,深刻地揭示了其间每一个动作的设计意图和实现原理,完美地再现了操作系统设计者的设计思路。阅读本书就如同跟随着操作系统设计者一起去思考,我们会在阅读的过程中发现Linux内核设计的精妙,会发现原来处处都“暗藏玄机”,哪怕是一行很短的代码。
      《Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》在所有细节上都力求完美。为了保证知识的准确性,操作系统运行过程中的每个动作都经过了严格的考证;为了让我们真正理解Linux内核的原理,它突破传统,以Linux的真实运行过程为主线进行讲解;为了做到真正易于理解,创新性地使用了图解的方式,精心绘制了349幅分辨率600dpi的时序图,图中表现的运行时结构和状态与操作系统实际运行时的真实状态完全吻合;为了提高阅读体验,本书采用了双色印刷,以便于我们更清楚地观察每一幅图中的细节。
  • 作者简介:
    新设计团队始于世纪之交,不断发展、优胜劣汰、适者生存、自然形成。
    团队始终不自量力地奉行高举高打的策略,只对计算机领域中基础的、有体系的事情感兴趣,且只做自己感兴趣的事。
    团队不相信二流水平、三流心态,能作出世界顶级的工作。团队相信成功的决定因素是人,而不是物。
    团队对艺术、对鉴赏力、对欣赏品味、对一切美好的事物都有着近乎狂热的追求。认为科学、技术的最高境界是艺术,认为世界的本源是通的。
    团队崇尚理论体系、崇尚个性鲜明、崇尚独立思考。“没体系”是团队成员之间善意贬损的常用语,也是判断一件事是否值得关注的标准之一。
    团队鄙视抄袭、弄虚作假。对别人热炒、做熟的事情不感兴趣,更不喜欢在别人的体系上狗尾续貂、移花接木,粉饰为“自主创新”。
    团队强调理论,注重实践,讲究科学的研究方法,不屈膝权威,不迷信盲从。提出基础假设,构建逻辑自洽的体系,证伪、修正、再证伪、再修正,不断推进体系的完善。
    团队钻研学术,但决不死板,学术和商业结合,彼此互为推进,最终改变整个时代的商业格局,是团队追求的目标。
    团队特别注重诚信,提倡公平、公正。
    团队内部是一方净土,既相互竞争,又相互帮助、相互协作。团队成员都在高高兴兴做自己喜欢的、感兴趣的事,没有时间顾及其他。勾心斗角、尔虞我诈、溜须拍马、拉帮结派……,在团队内部没有市场。
    团队在上述思想的指导下,研发了基于图形、图像(而非基于字符、语句)的图示化程序设计集成开发环境,已成功的移植了linux0.11,正确编译,正确boot,正确运行。现在正在研发新的操作系统,已初步实现了与现有的基于块概念的文件系统有较大差异的新的文件系统,据我们测试,相对于基于块设备的文件系统,在文件的读写速度上有较大优势。《Linux内核设计的艺术》一书,体现了我们设计新操作系统的过程中,对操作系统的理解。可能在不久的将来,我们也将我们在设计图示化程序设计平台中,对编译原理的理解,奉献给广大读者。
  • 目录:
    本书导读
    前言
    第1章 从开机加电到执行main函数之前的过程
    1.1 启动BIOS,准备实模式下的中断向量表和中断服务程序
    1.1.1 BIOS的启动原理
    1.1.2 BIOS在内存中加载中断向量表和中断服务程序
    1.2 加载操作系统内核程序并为保护模式做准备
    1.2.1 加载第一部分代码—引导程序(bootsect)
    1.2.2 加载第二部分代码—setup7
    1.2.3 加载第三部分代码—system模块
    1.3 开始向32位模式转变,为main函数的调用做准备
    1.3.1 关中断并将system移动到内存地址起始位置0x00000
    1.3.2 设置中断描述符表和全局描述符表
    1.3.3 打开A20,实现32位寻址
    1.3.4 为在保护模式下执行head.s做准备
    1.3.5 head.s开始执行
    1.4 本章小结
    第2章 从main到怠速
    2.1 开中断之前的准备工作
    2.1.1 复制根设备号和硬盘参数表 
    2.1.2 物理内存规划格局
    2.1.3 虚拟盘设置与初始化
    2.1.4 内存管理结构mem_map初始化
    2.1.5 异常处理类中断服务程序挂接
    2.1.6 初始化块设备请求项结构
    2.1.7 与建立人机交互界面相关的外设的中断服务程序挂接
    2.1.8 开机启动时间设置
    2.1.9 系统开始激活进程
    2.1.10 进程相关事务初始化设置
    2.1.11 时钟中断设置
    2.1.12 系统调用服务程序挂接
    2.1.13 初始化缓冲区管理结构
    2.1.14 初始化硬盘
    2.1.15 初始化软盘
    2.1.16 开中断
    2.2 进程创建的最基本动作
    2.2.1 操作系统为进程0创建进程1做准备
    2.2.2 在进程槽中为进程1 申请一个空闲位置并获取进程号
    2.2.3 复制进程信息之前,先将一些数据压栈
    2.2.4 初步设置进程1管理结构
    2.2.5 进程0创建进程1的过程中发生时钟中断
    2.2.6 从时钟中断返回
    2.2.7 调整进程1管理结构
    2.2.8 设置进程1的线性地址空间及物理页面
    2.2.9 继续调整进程1管理结构
    2.2.10 操作系统如何区分进程0和进程
    2.2.11 进程0准备切换到进程
    2.2.12 系统切换到进程1执行
    2.3 加载根文件系统
    2.3.1 进程1如何开始执行
    2.3.2 进程1开始执行
    2.3.3 进程1开始以数据块的形式操作硬盘
    2.3.4 将找到的缓冲块与请求项挂接
    2.3.5 将请求项与硬盘处理函数挂接
    2.3.6 进行硬盘读盘前的准备工作
    2.3.7 给硬盘下达读盘指令
    2.3.8 进程1由于等待读盘操作挂起
    2.3.9 系统切换到进程0执行
    2.3.10 进程0的执行过程
    2.3.11 进程0执行过程中发生硬盘中断
    2.3.12 硬盘中断服务程序响应后,进程0继续执行
    2.3.13 再次响应硬盘中断并唤醒进程
    2.3.14 读盘操作完成后,进程1继续执行
    2.3.15 进程1继续设置硬盘管理结构
    2.3.16 进程1获取软盘超级块,为加载根文件系统做准备
    2.3.17 进程1备份超级块数据
    2.3.18 进程1将根文件系统从软盘拷贝到虚拟盘
    2.3.19 进程1开始加载根文件系统
    2.3.20 进程1准备加载根文件系统超级块
    2.3.21 进程1加载根文件系统超级块
    2.3.22 进程1继续加载根文件系统
    2.3.23 进程1准备读取根目录i节点
    2.3.24 进程1加载根目录i节点
    2.3.25 进程1结束加载根文件系统的过程
    2.4 打开终端设备文件及复制文件句柄
    2.4.1 进程1与内核文件表挂接,为打开文件做准备
    2.4.2 确定打开操作的起点
    2.4.3 获得枝梢i节点—dev目录文件的i节点
    2.4.4 确定dev目录文件i节点为枝梢i节点
    2.4.5 继续返回枝梢i节点
    2.4.6 查找tty0文件的i节点
    2.4.7 将tty0设备文件的i节点返回给sys_open系统调用 
    2.4.8 分析tty0文件i节点
    2.4.9 设置文件管理结构并返回给用户进程
    2.4.10 进程1复制tty0文件句柄
    2.4.11 进程1继续复制tty0文件句柄
    2.5 创建进程
    2.5.1 进程1准备创建进程
    2.5.2 复制进程2管理结构并进行调整
    2.5.3 设置进程2的页目录项并复制进程2的页表
    2.5.4 调整进程2管理结构中与文件有关的内容
    2.5.5 进程1执行过程中发生时钟中断
    2.5.6 进程1从时钟中断返回,准备切换到进程
    2.6 进程1等待进程2退出
    2.6.1 进程1查找它自己的子进程
    2.6.2 对进程2的状态进行处理
    2.6.3 切换到进程2执行
    2.7 shell程序的加载
    2.7.1 进程2开始执行
    2.7.2 为打开/etc/rc文件做准备
    2.7.3 进程2打开“/etc/rc”配置文件
    2.7.4 通过压栈为加载shell文件做准备
    2.7.5 为参数和环境变量设置做准备
    2.7.6 得到shell文件的i节点
    2.7.7 为加载参数和环境变量做准备
    2.7.8 根据i节点,对shell文件进行检测
    2.7.9 检测shell文件头
    2.7.10 备份文件头并进行分析
    2.7.11 对shell文件进行进一步分析
    2.7.12 拷贝参数和环境变量
    2.7.13 调整进程2的管理结构
    2.7.14 继续调整进程2管理结构
    2.7.15 释放进程2继承的页面
    2.7.16 检测协处理器
    2.7.17 调整shell程序所在的线性空间地址
    2.7.18 为shell程序准备参数和环境变量
    2.7.19 继续调整进程2管理结构
    2.7.20 调整EIP,使其指向shell程序入口地址
    2.7.21 shell程序执行引发缺页中断
    2.7.22 缺页中断中shell程序加载前的检测
    2.7.23 为即将载入的内容申请页面
    2.7.24 将shell程序载入新获得的页面
    2.7.25 根据shell程序的情况,调整页面的内容
    2.7.26 将线性地址空间与程序所在的物理页面对应
    2.8 系统实现怠速
    2.8.1 shell进程准备创建update进程
    2.8.2 进程2开始执行/etc/rc文件
    2.8.3 准备加载update进程
    2.8.4 update进程的作用
    2.8.5 shell程序检测“/etc/rc”文件
    2.8.6 shell进程退出
    2.8.7 shell进程退出善后处理
    2.8.8 进程1清理shell进程管理结构
    2.8.9 系统开始重建shell
    2.8.10 shell进程为何不会再次退出
    2.9 小结
    第3章 安装文件系统
    第4章 文件操作
    第5章 用户进程与内存管理
    第6章 多个进程“同时”操作一个文件
    第7章 IPC问题
    第8章 操作系统的设计指导思想
    结束语
    “新设计团队”简介
    附录 搭建Linux 0.11系统环境
查看详情
好书推荐 / 更多
Linux内核设计的艺术
许倬云说美国:一个不断变化的现代西方文明
许倬云 著
Linux内核设计的艺术
(现代人小丛书)叙事的胜利——在大众文化时代讲故事
[加拿大]罗伯特·弗尔福德 著;李磊 译
Linux内核设计的艺术
我心深处(美国电影大师伍迪·艾伦权威访谈录)
[美]伍迪·艾伦(Woody Allen) 著;博集天卷 出品
Linux内核设计的艺术
蓝图(好社会的八大特征)
尼古拉斯·克里斯塔基斯(Nicholas A.Christakis) 著;贾拥民 译
Linux内核设计的艺术
理想的工作间
[韩]金霞娜 著;刘欣、全毅 译
Linux内核设计的艺术
印学百咏
何积石 著
Linux内核设计的艺术
科学素养:概念、情境与影响
肯妮.A.迪布纳 著;肯妮·A. 迪布纳(主编) 编;凯瑟琳.E.斯诺、凯瑟琳·E. 斯诺、裴新宁、郑太年 译
Linux内核设计的艺术
女性的时刻
梅琳达·盖茨 著
Linux内核设计的艺术
美丽的数学(一本独具特色的数学科普书)
[美]爱德华·沙伊纳曼(Edward Scheinerman) 著;博集天卷 出品
Linux内核设计的艺术
万千心理·游戏的力量:58种经典儿童游戏治疗技术
Cangelosi 著;[美]Charles、E.Schaefer、[美]Donna、张琦云、吴晨骏 译
Linux内核设计的艺术
疫苗竞赛:人类对抗疾病的代价(比尔·盖茨年度推荐!解答疫苗困惑。医学新闻报道的典范之作!《科学》《自然》期刊权威推荐)
梅雷迪丝·瓦德曼 著;罗爽 译
Linux内核设计的艺术
思考的艺术(第11版)·英文版
[美]文森特·赖安·拉吉罗(Vincent Ryan Ruggiero)