Skip to content
GitLab
Explore
Projects
Groups
Topics
Snippets
Projects
Groups
Topics
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
educg-net-22024-2210153
OSKernel2024-AronaOS-598
Commits
f5dafe14
Commit
f5dafe14
authored
1 year ago
by
li041
Browse files
Options
Download
Patches
Plain Diff
pass usertests
parent
33332e98
vm_on_async
Async-coroutine
FAT32
master
submit
syscall_fs
syscall_mem
syscall_process
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
os/src/mm/mod.rs
+1
-2
os/src/mm/mod.rs
os/src/mm/page_table.rs
+0
-38
os/src/mm/page_table.rs
os/src/syscall/fs.rs
+5
-3
os/src/syscall/fs.rs
os/src/syscall/process.rs
+0
-1
os/src/syscall/process.rs
with
6 additions
and
44 deletions
+6
-44
os/src/mm/mod.rs
+
1
−
2
View file @
f5dafe14
...
...
@@ -18,8 +18,7 @@ pub use memory_set::{dump_test, from_global_test, remap_test};
pub
use
memory_set
::{
kernel_token
,
MapPermission
,
MemorySet
,
KERNEL_SPACE
};
use
page_table
::
PTEFlags
;
pub
use
page_table
::{
current_satp
,
translated_byte_buffer
,
translated_ref
,
translated_refmut
,
translated_str
,
PageTable
,
PageTableEntry
,
UserBuffer
,
UserBufferIterator
,
current_satp
,
translated_byte_buffer
,
PageTable
,
PageTableEntry
,
UserBuffer
,
UserBufferIterator
,
};
use
self
::
frame_allocator
::
frame_allocator_test
;
...
...
This diff is collapsed.
Click to expand it.
os/src/mm/page_table.rs
+
0
−
38
View file @
f5dafe14
...
...
@@ -317,44 +317,6 @@ pub fn translated_byte_buffer(token: usize, ptr: *const u8, len: usize) -> Vec<&
v
}
/// Translate a pointer to a mutable u8 Vec end with `\0` through page table to a `String`
pub
fn
translated_str
(
token
:
usize
,
ptr
:
*
const
u8
)
->
String
{
let
page_table
=
PageTable
::
from_token
(
token
);
//page_table.dump();
let
mut
string
=
String
::
new
();
let
mut
va
=
ptr
as
usize
;
loop
{
let
ch
:
u8
=
*
(
page_table
.translate_va
(
VirtAddr
::
from
(
va
))
.unwrap
()
.get_mut
());
if
ch
==
0
{
break
;
}
string
.push
(
ch
as
char
);
va
+=
1
;
}
string
}
#[allow(unused)]
///Translate a generic through page table and return a reference
pub
fn
translated_ref
<
T
>
(
token
:
usize
,
ptr
:
*
const
T
)
->
&
'static
T
{
let
page_table
=
PageTable
::
from_token
(
token
);
page_table
.translate_va
(
VirtAddr
::
from
(
ptr
as
usize
))
.unwrap
()
.get_ref
()
}
///Translate a generic through page table and return a mutable reference
pub
fn
translated_refmut
<
T
>
(
token
:
usize
,
ptr
:
*
mut
T
)
->
&
'static
mut
T
{
let
page_table
=
PageTable
::
from_token
(
token
);
let
va
=
ptr
as
usize
;
page_table
.translate_va
(
VirtAddr
::
from
(
va
))
.unwrap
()
.get_mut
()
}
///Array of u8 slice that user communicate with os
pub
struct
UserBuffer
{
///U8 vec
...
...
This diff is collapsed.
Click to expand it.
os/src/syscall/fs.rs
+
5
−
3
View file @
f5dafe14
//! File and filesystem-related syscalls
use
crate
::
fs
::{
open_file
,
OpenFlags
};
use
crate
::
mm
::{
translated_byte_buffer
,
translated_str
,
UserBuffer
};
use
crate
::
mm
::{
translated_byte_buffer
,
UserBuffer
};
use
crate
::
task
::{
current_task
,
current_user_token
};
use
crate
::
utils
::
c_str_to_string
;
pub
fn
sys_write
(
fd
:
usize
,
buf
:
*
const
u8
,
len
:
usize
)
->
isize
{
let
token
=
current_user_token
();
...
...
@@ -45,8 +46,9 @@ pub fn sys_read(fd: usize, buf: *const u8, len: usize) -> isize {
pub
fn
sys_open
(
path
:
*
const
u8
,
flags
:
u32
)
->
isize
{
let
task
=
current_task
()
.unwrap
();
let
token
=
current_user_token
();
let
path
=
translated_str
(
token
,
path
);
//let token = current_user_token();
//let path = translated_str(token, path);
let
path
=
c_str_to_string
(
path
);
if
let
Some
(
inode
)
=
open_file
(
path
.as_str
(),
OpenFlags
::
from_bits
(
flags
)
.unwrap
())
{
let
mut
inner
=
task
.inner_exclusive_access
();
let
fd
=
inner
.alloc_fd
();
...
...
This diff is collapsed.
Click to expand it.
os/src/syscall/process.rs
+
0
−
1
View file @
f5dafe14
use
crate
::
fs
::{
open_file
,
OpenFlags
};
use
crate
::
mm
::{
translated_refmut
,
translated_str
};
use
crate
::
task
::
schedule
::
spawn_thread
;
use
crate
::
task
::{
current_task
,
current_user_token
,
exit_current
,
yield_task
};
use
crate
::
timer
::
get_time_ms
;
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment
Menu
Explore
Projects
Groups
Topics
Snippets