2019.11.03

This commit is contained in:
ultraji
2019-11-03 20:08:03 +08:00
parent e0bd090b2d
commit 3531145605
5 changed files with 13 additions and 22 deletions

View File

@@ -12,7 +12,7 @@
#### 1.1 方式一
可以选择已创建好的docker镜像作为实验环境人生苦短我用容器。linux用户可以通过挂载将本地项目目录挂载到容器中windows或mac用户可以在容器内重新git clone一份因为不区分文件名大小写会导致挂载出错
可以选择已创建好的docker镜像作为实验环境人生苦短我用容器。linux用户可以通过挂载将本地项目目录挂载到容器中windows或mac用户可以在容器内重新git clone一份因为不区分文件名大小写会导致挂载出错->[Dockerfile](src/docker/Dockerfile)
1. docker方式
@@ -34,7 +34,7 @@
docker-compose up -d
```
2. 通过浏览器输入```http://localhost:6080```访问容器内的桌面系统了。
2. 通过浏览器输入```http://localhost:6080```访问容器内的桌面系统了。
- vnc登陆密码: 123456
- 默认用户: ubuntu
@@ -42,7 +42,7 @@
#### 1.2 方式二
**ubuntu(64bit>=14.04)** 的用户也可以使用`src/code`目录下的一键环境搭建脚本[setup.sh](src/code/setup.sh)
**ubuntu(64bit>=14.04)** 的用户也可以使用`src/code`目录下的一键环境搭建脚本。->[setup.sh](src/code/setup.sh)
### 二、如何使用

View File

@@ -89,7 +89,7 @@ int free_block(int dev, int block)
if (block < sb->s_firstdatazone || block >= sb->s_nzones) {
panic("trying to free block not in datazone");
}
/* 然后从hash表中寻找该块数据 */
/* 从hash表中寻找该块数据 */
bh = get_hash_table(dev, block);
if (bh) {
if (bh->b_count > 1) { /* 引用次数大于1该块还有人用则调用brelse()后退出 */
@@ -104,11 +104,11 @@ int free_block(int dev, int block)
}
/* 接着复位block在逻辑块位图中的位(置0) */
block -= sb->s_firstdatazone - 1 ;
if (clear_bit(block & 8191, sb->s_zmap[block/8192]->b_data)) { /* 1个缓冲块有1024B即8192bits */
if (clear_bit(block & 8191, sb->s_zmap[block/8192]->b_data)) {
printk("block (%04x:%d) ", dev, block + sb->s_firstdatazone - 1);
printk("free_block: bit already cleared\n");
}
/* 最后置相应逻辑块位图所在缓冲区已修改标志 */
/* 最后置相应逻辑块位图所在缓冲区已修改标志 */
sb->s_zmap[block/8192]->b_dirt = 1;
return 1;
}
@@ -216,7 +216,7 @@ void free_inode(struct m_inode * inode)
}
/**
* 设备dev建一个新i节点
* 设备dev上创建一个新i节点
* @param[in] dev 设备号
* @retval 成功返回新i节点的指针失败返回NULL
*/

View File

@@ -89,7 +89,7 @@ static void wait_on_super(struct super_block * sb)
}
/**
* 取指定设备的超级块
* 取指定设备dev的超级块结构体指针
* 在超级块表(数组)中搜索指定设备dev的超级块结构信息。若找到则返回超级块的指针否则返回空指针。
* @param[in] dev 设备号
* @retval 超级块指针
@@ -119,7 +119,7 @@ struct super_block * get_super(int dev)
}
/**
* 释放指定设备的超级块
* 释放指定设备dev的超级块
* 释放设备所使用的超级块数组项(置s_dev = 0)并释放该设备i节点位图和逻辑块位图所占用的高速缓
* 冲块。如果超级块对应的文件系统是根文件系统或者其某个i节点上已经安装了其他的文件系统则不能
* 释放该超级块。

View File

@@ -10,6 +10,6 @@
/**
* 关闭文件
* @param[in] fd 要关闭的文件描述符
* @retval
* @retval 成功返回0失败返回-1。
*/
_syscall1(int, close, int, fd)

View File

@@ -12,7 +12,7 @@
* 打开(有可能创建)一个文件
* @param[in] filname 文件名
* @param[in] flag 文件打开标志
* @param[in] ...
* @param[in] ... 文件属性
* @retval 成功返回文件描述符,出错返回-1并且设置出错号
*/
int open(const char * filename, int flag, ...)
@@ -20,24 +20,15 @@ int open(const char * filename, int flag, ...)
register int res;
va_list arg;
/* 利用va_start()宏函数取得flag后面参数的指针然后调用系统中断int 0x80
功能号__NR_open。文件打开操作。
%0 - eax(返回的描述符或出错码)
%1 - eax(系统中断调用功能号__NR_open)
%2 - ebx(文件名filename)
%3 - ecx(打开文件标志flag)
%4 - edx(后随参数文件属性mode) */
va_start(arg, flag);
__asm__(
"int $0x80"
:"=a" (res)
:"0" (__NR_open), "b" (filename), "c" (flag),
"d" (va_arg(arg, int)));
/* 系统中断调用返回值大于或等于0表示是一个文件描述符则直接返回之 */
:"0" (__NR_open), "b" (filename), "c" (flag), "d" (va_arg(arg, int))
);
if (res >= 0){
return res;
}
/* 否则说明返回值小于0则代表一个出错码设置该出错码并返回-1 */
errno = -res;
return -1;
}