练习
=====================================================

.. toctree::
   :hidden:
   :maxdepth: 4


课后练习
-------------------------------

课后练习和实验练习中的题目难度表示：

- `*` 容易
- `**` 有一定工作量
- `***` 有难度
  
编程题
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. `*` 在你日常使用的操作系统环境中安装并配置好实验环境。简要说明你碰到的问题/困难和解决方法。
2. `*` 在Linux环境下编写一个会产生异常的应用程序，并简要解释操作系统的处理结果。
3. `**`  在Linux环境下编写一个可以睡眠5秒后打印出一个字符串，并把字符串内容存入一个文件中的应用程序A。(基于C或Rust语言)
4. `***`  在Linux环境下编写一个应用程序B，简要说明此程序能够体现操作系统的并发性、异步性、共享性和持久性。(基于C或Rust语言)

注： 在类Linux环境下编写尝试用GDB等调试工具调试应用程序A，能够设置断点，单步执行，显示变量信息。

问答题
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. `*`  什么是操作系统？操作系统的主要目标是什么？
2. `*`  面向服务器的操作系统与面向手机的操作系统在功能上有何异同？
3. `*`  对于目前的手机或桌面操作系统而言，操作系统是否应该包括网络浏览器？请说明理由。
4. `*`  操作系统的核心抽象有哪些？它们应对的对象是啥？
5. `*`  操作系统与应用程序之间通过什么来进行互操作和数据交换？
6. `*`  操作系统的特征是什么？请结合你日常使用的操作系统的具体运行情况来进一步说明操作系统的特征。
7. `*`  请说明基于C语言应用的执行环境与基于Java语言应用的执行环境的异同。
8. `**`  请简要列举操作系统的系统调用的作用，以及简要说明与程序执行、内存分配、文件读写相关的Linux系统调用的大致接口和含义。
9. `**`  以你编写的可以睡眠5秒后打印出一个字符串的应用程序A为例，说明什么是控制流？什么是异常控制流？什么是进程、地址空间和文件？并简要描述操作系统是如何支持这个应用程序完成其工作并结束的。
10. `*`  请简要描述支持单个应用的OS、批处理OS、多道程序OS、分时共享OS的特点。