上下文:我是一名刚完成操作系统课程并且目前正在学习数据库课程的学生。
我对OS和DBMS如何相互交互感到困惑。
例如,当用户程序尝试访问文件时会发生什么?是否调用系统调用,然后由OS处理该系统调用以找到正确的文件和数据?还是由DBMS处理该呼叫,该DBMS随后可以使用例如B +树更有效地查找数据(元组/记录)?然后,DBMS调用OS来实际获取数据?
是否仅在使用SQL之类的编程语言时访问数据库?如果我只是编写一个将文件写入磁盘的简单C程序,那么数据真的存储在“数据库”中还是仅存储在磁盘上的某个块中,文件信息存储在该文件的inode中?
对于这不是提出这个问题的正确论坛,以及这个问题是否太简单,我深表歉意。我尝试在线查找,但令人惊讶的是没有找到太多信息(也许我在搜索错误的关键词?)
答案 0 :(得分:1)
例如,当用户程序尝试访问文件时会发生什么? 这取决于用户程序如何访问文件。 fopen / read / write调用由操作系统管理的文件系统提供。
是否调用了系统调用,然后由OS处理该系统调用以找到正确的文件和数据? 如果使用数据库,则数据库将管理它自己的数据文件集,并索引到这些数据文件中。数据库引擎执行由底层OS处理的IO请求。此外,数据库很可能还将进行缓存以减少文件IO。
还是由DBMS处理的呼叫,然后可以例如使用B +树更有效地查找数据(元组/记录)?然后,DBMS调用OS来实际获取数据? 根据数据库查询,可以依次读取数据,也可以通过索引查找随机访问数据。
是否仅在使用SQL之类的编程语言时访问数据库?如果我只是编写一个将文件写入磁盘的简单C程序,数据是真的存储在“数据库”中还是仅存储在磁盘上的某个块中,文件的信息存储在该文件的inode中? 它存储在可能使用基于块的设计的文件系统中。一个简单的C程序应使用SDK连接到数据库,然后调用SQL语句。
希望这会有所帮助!
答案 1 :(得分:0)
答案实际上取决于操作系统和数据库系统。工业级操作系统支持多种文件结构和记录级别锁定。数据库系统可以利用操作系统提供的用于锁定和索引的功能。在这种情况下,很多数据库都是通过调用操作系统的系统服务调用来工作的。
由于完全不支持记录的大脑损坏的操作系统的兴起,更不用说记录或列锁定了,数据库系统几乎可以完成底层I / O调用之外的所有工作。某些操作系统受到大脑的严重破坏,以至于数据库系统必须创建自己的分区并有效管理分区中的自己的文件系统。从操作系统的角度来看,根本没有文件。