Presentation is loading. Please wait.

Presentation is loading. Please wait.

Project #2-2. Pintos User Program

Similar presentations


Presentation on theme: "Project #2-2. Pintos User Program"— Presentation transcript:

1 Project #2-2. Pintos User Program
Operating Systems : Project #2-2. Pintos User Program

2 Project2 Pintos Project 2. User Program § 파일 시스템 관련 시스템 콜을 구현
§ 파일 시스템 관련 시스템 콜을 구현 § 시스템 콜: create, remove, open, close, filesize, read, write, seek, tell Distributed and Cloud Computing Lab.

3 File System Call Implementation
Distributed and Cloud Computing Lab.

4 Base File System (1) • 파일 시스템 관련 시스템 콜을 구현하기 위해, Pintos의 기본적인 파일 시스템 구조(Base File System)를 이해할 필요가 있다 § 파일 시스템의 내부 구조를 이해하라는 뜻 아님 § 개론적인 내용 내지는 API 사용법 숙지 필요 Base File System (from pintos document) No internal synchronization File size is fixed at creation time File data is allocated as a single extent No subdirectories Filename’s length limitation Distributed and Cloud Computing Lab.

5 Base File System (2) • Project 2의 파일시스템 사용은 한 개의 파일시스템의 root directory(/) 에서의 연산만을 가정한다 (No subdirectories) • Kernel에서 의 파일 접근 § filesys/file.c에 존재하는 struct file을 통해 가능하다. § (본 프로젝트에서는 inode level에서의 접근은 필요하지 않다) /* An open file */ struct file { struct off_t bool inode *inode; pos; deny_write; /* File’s inode */ /* Current position */ /* Has file_deny_write() been called? */ } Distributed and Cloud Computing Lab.

6 Base File System (3) • 기본적인 파일 시스템 사용 인터페이스는 다음과 같다 fopen(…) open(…)
• 기본적인 파일 시스템 사용 인터페이스는 다음과 같다 n User Level 에서 fopen() 함수 호출 fopen(…) n 0x30 인터럽트 발생->system call handler 호출->open() 호출 open(…) n Open() 내부에서는 filesys_open() 함수를 호출하여 실제 파일을 open (이것이 구현할 부분) filesys_open(…) Distributed and Cloud Computing Lab.

7 Base File System (4) Example in Pintos Pintos test program에서 open() 호출
Distributed and Cloud Computing Lab.

8 System Calls about File System
write() and read() File Descriptor(표준 C의 FILE*와 비슷하다) open(), create() 등의 return value. • Pintos에서는 각 thread가 독립적인 FD를 가지며, 관리한다. File Descriptors of STDIN, STDOUT STDIN = 0 STDOUT = 1 § read(0)의 구현은 다음 함수를 이용하면 된다. pintos/ src/devices/input.c:uint8_t input_getc(void) § write(1)의 구현은 다음 함수를 이용하면 된다. pintos/src/lib/kernel/console.c:void putbuf(…) Distributed and Cloud Computing Lab.

9 Useful API (1) • 파일 시스템 관련 시스템 콜 구현 시 사용되는 API. § filesys/filesys.h
bool filesys_create (const char *name, off_t initial_size); struct file *filesys_open (const char *name); bool filesys_remove (const char *name); filesys/file.h void file_close (struct file *); off_t file_read (struct file *, void *, off_t); off_t file_write (struct file *, const void *, off_t); void file_deny_write (struct file *); void file_allow_write (struct file *); void file_seek (struct file *, off_t); off_t file_tell (struct file *); off_t file_length (struct file *); • 6, 7페이지 설명 + 이 페이지를 참고하여 구현하도록 한다 (구현할 시스템콜은 file_xxx를 호출해주는 인터페이스 역할) Distributed and Cloud Computing Lab.

10 Useful API (2) - Example fopen(…) open(…) filesys_open(…)
Distributed and Cloud Computing Lab.

11 Denying Writes to Executables
1. 프로세스는 메모리에 로드된 후 실행되기 때문에 실제 executable file은 지워져도 문제가 없을 수도 있다. 2. 하지만 pintos는 실행중인 프로그램의 executable file이 지 워지지 않기를 원하며, 이것을 구현한다. 3. 다음의 File System 함수가 유용하게 사용될 수 있다. pintos/src/filesys/file.c:void file_deny_write(…) pintos/src/filesys/file.c:void file_allow_write(…) Distributed and Cloud Computing Lab.

12 Synchronization APIs In ‘pintos/src/threads/synch.c’
void lock_init(struct lock *); void lock_acquire(struct lock *); bool lock_try_acquire(struct lock *); void lock_release(struct lock *); bool lock_held_by_current_thread(const struct lock *); void sema_init(struct semaphore *, unsigned value); void sema_down(struct semaphore *); void sema_try_down(struct semaphore *); void sema_up(struct semaphore *); void sema_self_test(void); Distributed and Cloud Computing Lab.

13 Protect Critical Section
n processes all competing to use some shared data. Each process has a code segment, called critical section, in which the shared data is accessed. Problem – ensure that when one process is executing in its critical section, no other process is allowed to execute in its critical section Test Case에서 Critical Section에 들어가는 영역을 잘 파악 하여 Synchronization API를 활용, 이를 보호해야 한다. ex) syn-read, syn-write Distributed and Cloud Computing Lab.

14 Test Set l l l l l l l l l l l l l l l l l l l
create-normal create-empty create-null create-bad-ptr create-long create-exists create-bound open-normal open-missing open-boundary open-empty open-null open-bad-ptr open-twice close-normal close-twice close-stdin close-stdout close-bad-fd l read-normal bad-read2 read-bad-ptr bad-write2 read-boundary bad-jump read-zero bad-jump2 read-stdout multi-oom read-bad-fd lg-create write-normal lg-full write-bad-ptr g-random write-boundary lg-seq-block write-zero lg-seq-random write-stdin sm-create write-bad-fd sm-full multi-child-fd sm-random rox-simple sm-seq-block rox-child sm-seq-random rox-multichild syn-read bad-read syn-remove syn-write bad-write Total : 56 tests n123

15 Submission 1. Team project 2. Deadline: 11월 13일(금) 오후 5시 E-mail 제출
pintos/src 에서 make clean 수행한 후, § 조 번호로 디렉토리를 만들고 그 안에 pintos 디렉토리와 document 복사 § 조 번호 디렉토리 전체를 os_prj2_2_조번호.tar.gz 으로 압축 (조번호는 두자리 숫자로) Ex. tar -czvf os_prj2_2_02.tar.gz ./02 § 메일 제목 : [OS_PRJ_#2] 00조 로 제출 • 메일제목, 압축파일명 등이 양식에 어긋날 경우, 제대로 제출처리가 되지 않을 수 있으니 반드시 신경 써서 양식에 맞게 제출해 주시기 바랍니다 Document AS815에 hardcopy 제출 Document deadline도 source code deadline과 같습니다. Distributed and Cloud Computing Lab.


Download ppt "Project #2-2. Pintos User Program"

Similar presentations


Ads by Google