BRONZE
BRONZE 등급의 판매자 자료

OS 파일 시스템 구현

파일 시스템의 종류 • NTFS: NTFS는 윈도 NT 계열 운영체제의 파일 시스템으로 윈도 2000, 윈도 XP, 윈도 서버 2003, 윈도 서버 2008, 윈도 비스타 등에도 포함되어 있다. • ext2: meta-data (비 동기, 시간 지연), 복구 시 모든 파일을 검사 (시간이 오래 걸린다.) 복구에 치명적 에러 발생해도 복구 감행(시스템에 치명적 악영향을 미칠 수 있다.) • ext3: journal(저널, 동기화), 모든 파일을 검사하지 않고 저널을 검사해서 시간이 단축 치명적 에러 발생시 그 데이터를 폐기한다. ... 문제 해결 방법 3.1 블록 정의 typedef struct tagSuperblock { char freeblocklist[BLOCK_NUM]; INode inodes[INODE_NUM]; char emptyspace[128]; } Superblock; SuperBlock 구조체는 128개의 블록 리스트를 가지고 있으며 16개의 INode를 가진다. 그리고 128KB를 맞춰주기 위해서 emptyspace라는 빈 공간을 128 바이트만큼 사용하였다. typedef struct tagDatablock { char data[BLOCK_SIZE]; } Datablock; 데이터 블록의 경우도 개발의 편의를 위하여 구조체로 선언하였다. 이는 1KB만큼의 빈 공간을 소비한다. 3.2 디스크 마운트 void diskMount(const char* pDiskName) { int i = 0; // open a file FS.pFile = fopen(pDiskName, "rb+"); strcpy(FS.diskName, pDiskName);// load blocks into memory fread(&superblock, sizeof(Superblock), 1, FS.pFile); fread(&datablocks, sizeof(Datablock), BLOCK_NUM - 1, FS.pFile); printf("loaded :: %dn", superblock.freeblocklist[1]); fclose(FS.pFile); } 시물레이터에서 파일 시스템은 디스크(파일) 저장된다. 따라서 먼서 파일시스템을 사용하기 위해서는 해당 시스템을 마운트 하여야 한다. 이를 정의한 함수는 diskMount이며 파일을 열고 파일시스템을 읽어와서 저장한다. 본 과제에서 몇몇 전역변수를 정리해본다. FS는 전역변수로써 파일 시스템에 대한 이름과 디스크 포인터를 가지고 있다.
압축파일
최초등록일 2011.11.02 최종저작일 2010.10
OS 파일 시스템 구현
  • 미리보기

    소개

    파일 시스템의 종류
    • NTFS: NTFS는 윈도 NT 계열 운영체제의 파일 시스템으로 윈도 2000, 윈도 XP, 윈도 서버 2003, 윈도 서버 2008, 윈도 비스타 등에도 포함되어 있다.
    • ext2: meta-data (비 동기, 시간 지연), 복구 시 모든 파일을 검사 (시간이 오래 걸린다.)
    복구에 치명적 에러 발생해도 복구 감행(시스템에 치명적 악영향을 미칠 수 있다.)
    • ext3: journal(저널, 동기화), 모든 파일을 검사하지 않고 저널을 검사해서 시간이 단축
    치명적 에러 발생시 그 데이터를 폐기한다.


    ...

    문제 해결 방법
    3.1 블록 정의

    typedef struct tagSuperblock
    {
    char freeblocklist[BLOCK_NUM];
    INode inodes[INODE_NUM];
    char emptyspace[128];
    } Superblock;


    SuperBlock 구조체는 128개의 블록 리스트를 가지고 있으며 16개의 INode를 가진다. 그리고 128KB를 맞춰주기 위해서 emptyspace라는 빈 공간을 128 바이트만큼 사용하였다.

    typedef struct tagDatablock
    {
    char data[BLOCK_SIZE];
    } Datablock;

    데이터 블록의 경우도 개발의 편의를 위하여 구조체로 선언하였다. 이는 1KB만큼의 빈 공간을 소비한다.
    3.2 디스크 마운트

    void diskMount(const char* pDiskName)
    {
    int i = 0; // open a file
    FS.pFile = fopen(pDiskName, "rb+");
    strcpy(FS.diskName, pDiskName);// load blocks into memory
    fread(&superblock, sizeof(Superblock), 1, FS.pFile);
    fread(&datablocks, sizeof(Datablock), BLOCK_NUM - 1, FS.pFile);

    printf("loaded :: %dn", superblock.freeblocklist[1]);
    fclose(FS.pFile);
    }

    시물레이터에서 파일 시스템은 디스크(파일) 저장된다. 따라서 먼서 파일시스템을 사용하기 위해서는 해당 시스템을 마운트 하여야 한다. 이를 정의한 함수는 diskMount이며 파일을 열고 파일시스템을 읽어와서 저장한다.
    본 과제에서 몇몇 전역변수를 정리해본다. FS는 전역변수로써 파일 시스템에 대한 이름과 디스크 포인터를 가지고 있다.

    컴파일 실행환경

    GCC

    본문내용

    Common.c

    #ifndef _COMMON_H_
    #define _COMMON_H_

    #define BLOCK_NUM 128
    #define BLOCK_SIZE 1024
    #define INODE_NUM 16
    #define MAX_BLOCK_NUM_PER_FILE 8
    #define MAX_FILENAME_LENGTH 8
    #define MAX_DISKNAME_LENGTH 128

    #endif

    #ifndef _SUPERBLOCK_H_
    #define _SUPERBLOCK_H_


    Superblock.h

    #include "common.h"
    //#include "inode.h"

    typedef struct tagINode
    {
    char name[8]; //파일명
    int size; //파일 크기
    int blockPointers[8]; //다이렉트 블록 포인터
    char time[5]; //파일의 최종 수정 시간
    int used; //inode가 사용되었나 사용 되지 않았나
    } INode;



    typedef struct tagSuperblock
    {
    char freeblocklist[BLOCK_NUM];
    INode inodes[INODE_NUM];
    char emptyspace[128];
    } Superblock;



    #endif

    Shell.c
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include "superblock.h"
    #include "common.h"
    #include <time.h>


    ///operation


    // disk operation
    void diskCreate(const char* pDiskName);
    int diskMount(const char* pDiskName);

    // file operation
    int create(const char* pDiskName, const char* pFileName, int fileSize);
    int delete(const char* pDiskName, const char* pFileName);
    int read(const char* pDiskName, const char* pFileName, int blockNum, char* pBuf);
    int write(const char* pDiskName, const char* pFileName, int blockNum, const char* pBuf);
    void ls(void);
    void infoDiskFree(void);



    /////////////////datablock

    typedef struct tagDatablock
    {
    char data[BLOCK_SIZE];
    } Datablock;

    void initBlock(void* pBlock);





    //////////////////helper
    int getNumOfFreeBlock(Superblock* pSuperblock);
    INode* getFreeINode(Superblock* pSuperblock);
    INode* getINode(Superblock* pSuperblock, const char* pFileName);
    Datablock* getFreeBlock(Superblock* pSuperblock, Datablock* pDatablock);
    void saveToFile(Superblock* pSuperblock, Datablock* pDatablocks, const char* pDiskName);




    //////////////global
    typedef struct tagFileSystemInfo
    {
    FILE* pFile;
    char diskName[MAX_DISKNAME_LENGTH];
    } FSInfo;

    extern FSInfo FS;
    extern Superblock superblock;
    extern Datablock datablocks[BLOCK_NUM - 1];

    // create a filesystem
    // args: pDiskName : name of disk containing file system
    void diskCreate(const char* pDiskName)
    {
    Superblock superblock;
    Datablock datablock[127];

    // initialize superblock
    initBlock((void*)&superblock);
    superblock.freeblocklist[0] = 1;

    // save blocks to a file
    saveToFile(&superblock, &datablock, pDiskName);
    }

    // mount a disk before using, open a file containing filesystem and store the pointer to pFS(global)
    // args: pDiskName : name of disk that user want to use
    // ret: -1(fail), 0(success)
    int diskMount(const char* pDiskName)
    {
    int i = 0;
    // open a file
    FS.pFile = fopen(pDiskName, "rb+");

    if (FS.pFile == NULL)
    return -1;

    strcpy(FS.diskName, pDiskName);

    // load blocks into memory
    fread(&superblock, sizeof(Superblock), 1, FS.pFile);
    fread(&datablocks, sizeof(Datablock), BLOCK_NUM - 1, FS.pFile);

    printf("loaded successfullyn");
    fclose(FS.pFile);

    return 0;
    }

    // create a file in a given size
    // args: pDiskName : name of disk containing file system, pFileName : file name to create, filesize : the size of file
    // ret: -1(fail), 0(success)
    int create(const char* pDiskName, const char* pFileName, int fileSize)
    {
    // check if it`s available
    int numOfFreeBlock;
    int i,j;


    ..
    ...

    참고자료

    · 없음
  • 자료후기

    Ai 리뷰
    구매한 자료가 제가 필요로 하는 모든 정보를 포함하고 있어, 매우 만족스러웠습니다. 판매자의 자료는 다음에도 다시 이용하고 싶습니다. 정말 감사드립니다.
    왼쪽 화살표
    오른쪽 화살표
  • 자주묻는질문의 답변을 확인해 주세요

    해피캠퍼스 FAQ 더보기

    꼭 알아주세요

    • 자료의 정보 및 내용의 진실성에 대하여 해피캠퍼스는 보증하지 않으며, 해당 정보 및 게시물 저작권과 기타 법적 책임은 자료 등록자에게 있습니다.
      자료 및 게시물 내용의 불법적 이용, 무단 전재∙배포는 금지되어 있습니다.
      저작권침해, 명예훼손 등 분쟁 요소 발견 시 고객센터의 저작권침해 신고센터를 이용해 주시기 바랍니다.
    • 해피캠퍼스는 구매자와 판매자 모두가 만족하는 서비스가 되도록 노력하고 있으며, 아래의 4가지 자료환불 조건을 꼭 확인해주시기 바랍니다.
      파일오류 중복자료 저작권 없음 설명과 실제 내용 불일치
      파일의 다운로드가 제대로 되지 않거나 파일형식에 맞는 프로그램으로 정상 작동하지 않는 경우 다른 자료와 70% 이상 내용이 일치하는 경우 (중복임을 확인할 수 있는 근거 필요함) 인터넷의 다른 사이트, 연구기관, 학교, 서적 등의 자료를 도용한 경우 자료의 설명과 실제 자료의 내용이 일치하지 않는 경우

찾으시던 자료가 아닌가요?

지금 보는 자료와 연관되어 있어요!
왼쪽 화살표
오른쪽 화살표
문서 초안을 생성해주는 EasyAI
안녕하세요. 해피캠퍼스의 방대한 자료 중에서 선별하여 당신만의 초안을 만들어주는 EasyAI 입니다.
저는 아래와 같이 작업을 도와드립니다.
- 주제만 입력하면 목차부터 본문내용까지 자동 생성해 드립니다.
- 장문의 콘텐츠를 쉽고 빠르게 작성해 드립니다.
- 스토어에서 무료 캐시를 계정별로 1회 발급 받을 수 있습니다. 지금 바로 체험해 보세요!
이런 주제들을 입력해 보세요.
- 유아에게 적합한 문학작품의 기준과 특성
- 한국인의 가치관 중에서 정신적 가치관을 이루는 것들을 문화적 문법으로 정리하고, 현대한국사회에서 일어나는 사건과 사고를 비교하여 자신의 의견으로 기술하세요
- 작별인사 독후감
해캠 AI 챗봇과 대화하기
챗봇으로 간편하게 상담해보세요.
2025년 05월 12일 월요일
AI 챗봇
안녕하세요. 해피캠퍼스 AI 챗봇입니다. 무엇이 궁금하신가요?
12:07 오전