[Krafton Jungle] PintOS 2.0.0
크래프톤 정글 PintOS
 
Loading...
Searching...
No Matches
syscall.c File Reference
#include <syscall.h>
#include <stdint.h>
#include "../syscall-nr.h"
Include dependency graph for syscall.c:

Macros

#define syscall0(NUMBER)
 
#define syscall1(NUMBER, ARG0)
 
#define syscall2(NUMBER, ARG0, ARG1)
 
#define syscall3(NUMBER, ARG0, ARG1, ARG2)
 
#define syscall4(NUMBER, ARG0, ARG1, ARG2, ARG3)
 
#define syscall5(NUMBER, ARG0, ARG1, ARG2, ARG3, ARG4)
 

Functions

 __attribute__ ((always_inline))
 
void halt (void)
 핀토스 자체를 종료시키는 시스템 콜 More...
 
void exit (int status)
 현재 프로세스를 종료시키는 시스템 콜 More...
 
pid_t fork (const char *thread_name)
 
int exec (const char *file)
 cmd_line으로 들어온 실행 파일을 실행한다. More...
 
int wait (pid_t pid)
 pid에 해당하는 자식 프로세스가 종료될 때까지 기다린다. More...
 
bool create (const char *file, unsigned initial_size)
 파일을 생성하는 시스템 콜 More...
 
bool remove (const char *file)
 파일을 샂게하는 시스템 콜 More...
 
int open (const char *file)
 파일을 열 때 사용하는 시스템 콜 More...
 
int filesize (int fd)
 파일의 크기를 알려주는 시스템 콜 More...
 
int read (int fd, void *buffer, unsigned size)
 열린 파일의 데이터를 읽는 시스템 콜 More...
 
int write (int fd, const void *buffer, unsigned size)
 열린 파일에 데이터를 쓰는 시스템 콜 More...
 
void seek (int fd, unsigned position)
 열린 파일의 위치를 이동하는 시스템 콜 More...
 
unsigned tell (int fd)
 열린 파일의 위치를 알려주는 시스템 콜 More...
 
void close (int fd)
 열린 파일을 닫는 시스템 콜 More...
 
int dup2 (int oldfd, int newfd)
 
void * mmap (void *addr, size_t length, int writable, int fd, off_t offset)
 열린 파일을 가상 주소 공간에 매핑한다. More...
 
void munmap (void *addr)
 mmap으로 매핑된 주소를 해제한다. More...
 
bool chdir (const char *dir)
 
bool mkdir (const char *dir)
 
bool readdir (int fd, char name[READDIR_MAX_LEN+1])
 
bool isdir (int fd)
 
int inumber (int fd)
 
int symlink (const char *target, const char *linkpath)
 
int mount (const char *path, int chan_no, int dev_no)
 
int umount (const char *path)
 

Macro Definition Documentation

◆ syscall0

#define syscall0 (   NUMBER)
Value:
( \
syscall(((uint64_t) NUMBER), 0, 0, 0, 0, 0, 0))
unsigned long long int uint64_t
Definition: stdint.h:29

◆ syscall1

#define syscall1 (   NUMBER,
  ARG0 
)
Value:
( \
syscall(((uint64_t) NUMBER), \
((uint64_t) ARG0), 0, 0, 0, 0, 0))

◆ syscall2

#define syscall2 (   NUMBER,
  ARG0,
  ARG1 
)
Value:
( \
syscall(((uint64_t) NUMBER), \
((uint64_t) ARG0), \
((uint64_t) ARG1), \
0, 0, 0, 0))

◆ syscall3

#define syscall3 (   NUMBER,
  ARG0,
  ARG1,
  ARG2 
)
Value:
( \
syscall(((uint64_t) NUMBER), \
((uint64_t) ARG0), \
((uint64_t) ARG1), \
((uint64_t) ARG2), 0, 0, 0))

◆ syscall4

#define syscall4 (   NUMBER,
  ARG0,
  ARG1,
  ARG2,
  ARG3 
)
Value:
( \
syscall(((uint64_t *) NUMBER), \
((uint64_t) ARG0), \
((uint64_t) ARG1), \
((uint64_t) ARG2), \
((uint64_t) ARG3), 0, 0))

◆ syscall5

#define syscall5 (   NUMBER,
  ARG0,
  ARG1,
  ARG2,
  ARG3,
  ARG4 
)
Value:
( \
syscall(((uint64_t) NUMBER), \
((uint64_t) ARG0), \
((uint64_t) ARG1), \
((uint64_t) ARG2), \
((uint64_t) ARG3), \
((uint64_t) ARG4), \
0))

Function Documentation

◆ __attribute__()

__attribute__ ( (always_inline)  )
7 {
8 int64_t ret;
9 register uint64_t *num asm ("rax") = (uint64_t *) num_;
10 register uint64_t *a1 asm ("rdi") = (uint64_t *) a1_;
11 register uint64_t *a2 asm ("rsi") = (uint64_t *) a2_;
12 register uint64_t *a3 asm ("rdx") = (uint64_t *) a3_;
13 register uint64_t *a4 asm ("r10") = (uint64_t *) a4_;
14 register uint64_t *a5 asm ("r8") = (uint64_t *) a5_;
15 register uint64_t *a6 asm ("r9") = (uint64_t *) a6_;
16
17 __asm __volatile(
18 "mov %1, %%rax\n"
19 "mov %2, %%rdi\n"
20 "mov %3, %%rsi\n"
21 "mov %4, %%rdx\n"
22 "mov %5, %%r10\n"
23 "mov %6, %%r8\n"
24 "mov %7, %%r9\n"
25 "syscall\n"
26 : "=a" (ret)
27 : "g" (num), "g" (a1), "g" (a2), "g" (a3), "g" (a4), "g" (a5), "g" (a6)
28 : "cc", "memory");
29 return ret;
30}
__asm __volatile("wrmsr" ::"c"(ecx), "d"(edx), "a"(eax))
signed long long int int64_t
Definition: stdint.h:16
Here is the call graph for this function:

◆ chdir()

bool chdir ( const char *  dir)
159 {
160 return syscall1 (SYS_CHDIR, dir);
161}
#define syscall1(NUMBER, ARG0)
Definition: syscall.c:39
Definition: directory.c:10
@ SYS_CHDIR
Definition: syscall-nr.h:27

◆ close()

void close ( int  fd)

열린 파일을 닫는 시스템 콜

파일을 닫고 fd를 제거한다.

Parameters
fd
139 {
140 syscall1 (SYS_CLOSE, fd);
141}
@ SYS_CLOSE
Definition: syscall-nr.h:20
Here is the caller graph for this function:

◆ create()

bool create ( const char *  file,
unsigned  initial_size 
)

파일을 생성하는 시스템 콜

filesys_create (const char *name, off_t initial_size)

Parameters
file생성할 파일의 이름 및 경로 정보
initial_size생성할 파일의 크기
Returns
true 성공
false 실패
99 {
100 return syscall2 (SYS_CREATE, file, initial_size);
101}
#define syscall2(NUMBER, ARG0, ARG1)
Definition: syscall.c:44
Definition: file.c:7
@ SYS_CREATE
Definition: syscall-nr.h:12
Here is the caller graph for this function:

◆ dup2()

int dup2 ( int  oldfd,
int  newfd 
)
144 {
145 return syscall2 (SYS_DUP2, oldfd, newfd);
146}
@ SYS_DUP2
Definition: syscall-nr.h:35

◆ exec()

int exec ( const char *  file)

cmd_line으로 들어온 실행 파일을 실행한다.

Parameters
file실행하려는 파일 이름
Returns
int 성공 시 0, 실패 시 -1
89 {
90 return (pid_t) syscall1 (SYS_EXEC, file);
91}
int pid_t
Definition: syscall.h:9
@ SYS_EXEC
Definition: syscall-nr.h:10
Here is the caller graph for this function:

◆ exit()

void exit ( int  status)

현재 프로세스를 종료시키는 시스템 콜

종료 시 출력 : "${프로세스 명}: exit(${프로세스 상태})\n"
process_exit()에 존재

Parameters
status정상 종료 시, 0
78 {
79 syscall1 (SYS_EXIT, status);
80 NOT_REACHED ();
81}
#define NOT_REACHED()
Definition: debug.h:34
@ SYS_EXIT
Definition: syscall-nr.h:8
Here is the caller graph for this function:

◆ filesize()

int filesize ( int  fd)

파일의 크기를 알려주는 시스템 콜

Parameters
fd
Returns
int 성공 시 파일 크기, 실패 시 -1
114 {
115 return syscall1 (SYS_FILESIZE, fd);
116}
@ SYS_FILESIZE
Definition: syscall-nr.h:15
Here is the caller graph for this function:

◆ fork()

pid_t fork ( const char *  thread_name)
84 {
86}
@ SYS_FORK
Definition: syscall-nr.h:9
const char * thread_name(void)
Definition: thread.c:293
Here is the call graph for this function:
Here is the caller graph for this function:

◆ halt()

void halt ( void  )

핀토스 자체를 종료시키는 시스템 콜

72 {
74 NOT_REACHED ();
75}
#define syscall0(NUMBER)
Definition: syscall.c:34
@ SYS_HALT
Definition: syscall-nr.h:7
Here is the caller graph for this function:

◆ inumber()

int inumber ( int  fd)
179 {
180 return syscall1 (SYS_INUMBER, fd);
181}
@ SYS_INUMBER
Definition: syscall-nr.h:31

◆ isdir()

bool isdir ( int  fd)
174 {
175 return syscall1 (SYS_ISDIR, fd);
176}
@ SYS_ISDIR
Definition: syscall-nr.h:30

◆ mkdir()

bool mkdir ( const char *  dir)
164 {
165 return syscall1 (SYS_MKDIR, dir);
166}
@ SYS_MKDIR
Definition: syscall-nr.h:28

◆ mmap()

void * mmap ( void *  addr,
size_t  length,
int  writable,
int  fd,
off_t  offset 
)

열린 파일을 가상 주소 공간에 매핑한다.

Parameters
addr
length
writable
fd
offset
Returns
void*
149 {
150 return (void *) syscall5 (SYS_MMAP, addr, length, writable, fd, offset);
151}
#define syscall5(NUMBER, ARG0, ARG1, ARG2, ARG3, ARG4)
Definition: syscall.c:63
@ SYS_MMAP
Definition: syscall-nr.h:23
Here is the caller graph for this function:

◆ mount()

int mount ( const char *  path,
int  chan_no,
int  dev_no 
)
189 {
190 return syscall3 (SYS_MOUNT, path, chan_no, dev_no);
191}
#define syscall3(NUMBER, ARG0, ARG1, ARG2)
Definition: syscall.c:50
@ SYS_MOUNT
Definition: syscall-nr.h:37

◆ munmap()

void munmap ( void *  addr)

mmap으로 매핑된 주소를 해제한다.

Parameters
addr
154 {
155 syscall1 (SYS_MUNMAP, addr);
156}
@ SYS_MUNMAP
Definition: syscall-nr.h:24
Here is the caller graph for this function:

◆ open()

int open ( const char *  file)

파일을 열 때 사용하는 시스템 콜

Parameters
file파일의 이름 및 경로 정보
Returns
int 성공 시 fd, 실패 시 -1
109 {
110 return syscall1 (SYS_OPEN, file);
111}
@ SYS_OPEN
Definition: syscall-nr.h:14
Here is the caller graph for this function:

◆ read()

int read ( int  fd,
void *  buffer,
unsigned  size 
)

열린 파일의 데이터를 읽는 시스템 콜

Parameters
fd
buffer읽은 데이터를 저장할 버퍼의 주소 값
length읽을 데이터 크기
Returns
int
119 {
120 return syscall3 (SYS_READ, fd, buffer, size);
121}
static struct intq buffer
Definition: input.c:7
uint16_t size
Definition: mmu.h:0
@ SYS_READ
Definition: syscall-nr.h:16
Here is the caller graph for this function:

◆ readdir()

bool readdir ( int  fd,
char  name[READDIR_MAX_LEN+1] 
)
169 {
170 return syscall2 (SYS_READDIR, fd, name);
171}
@ SYS_READDIR
Definition: syscall-nr.h:29

◆ remove()

bool remove ( const char *  file)

파일을 샂게하는 시스템 콜

Parameters
file제거할 파일의 이름 및 경로 정보
Returns
true 성공
false 실패
104 {
105 return syscall1 (SYS_REMOVE, file);
106}
@ SYS_REMOVE
Definition: syscall-nr.h:13
Here is the caller graph for this function:

◆ seek()

void seek ( int  fd,
unsigned  position 
)

열린 파일의 위치를 이동하는 시스템 콜

Parameters
fd
position현재 위치(offset)를 기준으로 이동할 거리
129 {
130 syscall2 (SYS_SEEK, fd, position);
131}
@ SYS_SEEK
Definition: syscall-nr.h:18
Here is the caller graph for this function:

◆ symlink()

int symlink ( const char *  target,
const char *  linkpath 
)
184 {
185 return syscall2 (SYS_SYMLINK, target, linkpath);
186}
@ SYS_SYMLINK
Definition: syscall-nr.h:32

◆ tell()

unsigned tell ( int  fd)

열린 파일의 위치를 알려주는 시스템 콜

Parameters
fd
Returns
unsigned 성공 시 파일의 위치(offset), 실패 시 -1
134 {
135 return syscall1 (SYS_TELL, fd);
136}
@ SYS_TELL
Definition: syscall-nr.h:19
Here is the caller graph for this function:

◆ umount()

int umount ( const char *  path)
194 {
195 return syscall1 (SYS_UMOUNT, path);
196}
@ SYS_UMOUNT
Definition: syscall-nr.h:38

◆ wait()

int wait ( pid_t  pid)

pid에 해당하는 자식 프로세스가 종료될 때까지 기다린다.

Parameters
pid기다리려는 자식 프로세스의 pid
Returns
int 성공 시 자식 프로세스의 종료 상태, 실패 시 -1
94 {
95 return syscall1 (SYS_WAIT, pid);
96}
@ SYS_WAIT
Definition: syscall-nr.h:11
Here is the caller graph for this function:

◆ write()

int write ( int  fd,
const void *  buffer,
unsigned  size 
)

열린 파일에 데이터를 쓰는 시스템 콜

Parameters
fd
buffer
size
Returns
int
124 {
125 return syscall3 (SYS_WRITE, fd, buffer, size);
126}
@ SYS_WRITE
Definition: syscall-nr.h:17
Here is the caller graph for this function: