코드네임 :
⚙️ 운영체제 - 파일시스템과 파일 ⚙️ 본문
[ 파일 ]
: 사용자 및 응용프로그램의 관점으로는 정보를 저장하고 관리하는 논리적 단위
: 컴퓨터 시스템 관점으로는 정보를 저장하는 컨테이너이며 0과 1의 데이터 덩어리, 바이트의 시퀀스
- 운영체제는 파일의 모든 과정을 제어하기에 반드시 필요!
[섹터, 트랙, 실린더, 블록]
섹터 : 플래터에 정보가 저장되는 최소 단위, 512바이트 혹은 4096바이트
트랙 : 플래터에 정보가 저장되는 하나의 동심원, 여러 개의 섹터들을 포함
실린더 : 같은 반지름을 가진 모든 트랙 집합 (ex 헤드가 8개인 디스크에서 8개의 트랙을 묶어 실린더라 부름)
블록 : 운영체제가 파일 데이터를 입출력하는 논리적 단위, 몇개의 섹터로 구성됨
[파일 입출력 주소]
응용프로그램 : 파일 내 바이트 주소 (offset)
- 응용프로그램은 파일의 데이터를 **"파일 내 바이트 단위의 오프셋(offset)"**으로 접근합니다.
- 예를 들어, 파일에서 100번째 바이트 데이터를 읽으려면, 파일의 시작 주소를 기준으로 100번째 위치의 데이터를 요청합니다.
운영체제 : 논리 블록 주소 (LBA) - 1차원의 연속된 데이터 블록, 모든블록은 0번 부터 시작하는 블록번호
- 운영체제는 **LBA(Logical Block Address)**를 사용해 데이터를 관리합니다.
- LBA란?
디스크를 1차원의 연속된 데이터 블록 번호로 추상화한 주소 체계입니다.- 모든 데이터 블록은 0부터 시작하는 블록 번호로 관리됩니다.
- 운영체제는 파일 데이터를 논리 블록 단위로 처리하며, 이를 통해 파일의 특정 위치를 디스크 블록에 매핑합니다.
- 예를 들어, 파일 내의 100번째 바이트는 운영체제 입장에서 LBA 20번 블록의 일부일 수 있습니다.
- LBA란?
디스크장치 : 디스크 물리 주소 - CHS(Cylinder-Head-Sector) 물리 주소, 디스크의 섹터 위치를 나타내는 주소
- 디스크는 데이터를 물리적으로 **CHS(Cylinder-Head-Sector)**라는 방식으로 관리합니다.
- CHS란? 디스크의 물리적인 구조를 기반으로 데이터를 위치시키는 주소 체계입니다. 디스크는 다음 세 가지 정보로 물리 주소를 정의합니다:
- Cylinder (실린더): 디스크 플래터에서 트랙(원형 경로)의 번호.
- Head (헤드): 읽기/쓰기 헤드의 번호(디스크 플래터의 각 면에 존재).
- Sector (섹터): 트랙을 나눈 작은 단위.
- CHS 주소는 물리적으로 디스크의 어느 위치에 데이터가 저장되어 있는지를 나타냅니다.
- CHS란? 디스크의 물리적인 구조를 기반으로 데이터를 위치시키는 주소 체계입니다. 디스크는 다음 세 가지 정보로 물리 주소를 정의합니다:
[파일 시스템]
: 저장 매체에 파일을 생성하고 저장하고 읽고 쓰는 운영체제의 기능을 통칭
파일 시스템의 논리 구조 : 수십만 개의 파일들을 다루기 위한 계층 구조 (트리형)
저장소에 파일 시스템 구축 : 저장하는 방법과 위치 구성, 빈블록 유지 관리
- 파일 시스템은 파일 데이터를 디스크와 같은 저장 장치에 저장하기 위해 물리적인 저장 방법과 위치 정보를 관리합니다.
커널 내 파일 입출력 구현 : 파일을 읽고 쓰는 등의 기능
- 파일 입출력(I/O) 작업은 응용 프로그램이 직접 디스크에 접근하지 않고, 운영체제 커널이 이를 처리합니다.
응용프로그램을 위한 파일 시스템 인터페이스 (시스템 콜)
1. 파일 작업 관련 주요 시스템 콜
(1) 파일 생성 및 열기
- open()
- 파일을 열거나 새 파일을 생성합니다.
- 파일을 열 때, 운영체제는 파일의 메타데이터(위치, 크기 등)를 참조하고 파일 디스크립터(File Descriptor)를 반환합니다.
- 예:
c코드 복사int fd = open("file.txt", O_RDWR | O_CREAT, 0644);
- "file.txt" 파일을 읽기/쓰기 모드로 열거나 없으면 생성합니다.
- 0644: 파일 권한 (읽기/쓰기 설정).
(2) 파일 읽기 및 쓰기
- read()
- 파일에서 데이터를 읽습니다.
- 반환값: 읽은 바이트 수.
- 예:
c코드 복사char buffer[100]; int bytes_read = read(fd, buffer, 100);
- write()
- 파일에 데이터를 씁니다.
- 반환값: 기록된 바이트 수.
- 예:
c코드 복사const char *data = "Hello, World!"; int bytes_written = write(fd, data, strlen(data));
(3) 파일 위치 제어
- lseek()
- 파일 내의 읽기/쓰기 **오프셋(offset)**을 변경합니다.
- 예:
c코드 복사lseek(fd, 0, SEEK_SET); // 파일의 시작으로 이동 lseek(fd, 100, SEEK_CUR); // 현재 위치에서 100 바이트 앞으로 이동
(4) 파일 닫기
- close()
- 파일 디스크립터를 닫고, 운영체제에서 파일 관련 리소스를 해제합니다.
- 예:
c코드 복사close(fd);
'컴퓨터와 함께해요 > 운영체제' 카테고리의 다른 글
⚙️ 운영체제 - 파일시스템 구축 ⚙️ (0) | 2024.11.25 |
---|---|
⚙️ 운영체제 - 파일 시스템 구조 ⚙️ (0) | 2024.11.25 |
운체 팀플 - cpu scheduling RR/LRTF/FCFS (1) | 2024.11.25 |
운체 CPU 스케줄링 팀플..2 (0) | 2024.11.24 |
⚙️ 운영체제 - 페이지 교체 ⚙️ (0) | 2024.11.12 |