크래프톤 정글 일지
[PintOS] 디스크와 채널 구조체
나한나한나한나
2024. 5. 21. 18:37
struct disk
disk
구조체는 ATA 디스크 장치를 나타냅니다.
c코드 복사
struct disk {
char name[8]; /* Name, e.g. "hd0:1". */
struct channel *channel; /* Channel disk is on. */
int dev_no; /* Device 0 or 1 for master or slave. */
bool is_ata; /* 1=This device is an ATA disk. */
disk_sector_t capacity; /* Capacity in sectors (if is_ata). */
long long read_cnt; /* Number of sectors read. */
long long write_cnt; /* Number of sectors written. */
};
char name[8];
:- 디스크의 이름을 저장합니다. 예를 들어, "hd0:1"과 같은 형식입니다. 채널 번호와 디바이스 번호(마스터 또는 슬레이브)를 나타냅니다.
struct channel *channel;
:- 디스크가 연결된 채널을 가리키는 포인터입니다.
int dev_no;
:- 디바이스 번호를 나타냅니다. 0이면 마스터, 1이면 슬레이브를 의미합니다.
bool is_ata;
:- 이 디바이스가 ATA 디스크인지 여부를 나타내는 플래그입니다.
true
이면 ATA 디스크입니다.
- 이 디바이스가 ATA 디스크인지 여부를 나타내는 플래그입니다.
disk_sector_t capacity;
:- 디스크의 용량을 섹터 단위로 나타냅니다.
is_ata
가true
일 때만 유효합니다.
- 디스크의 용량을 섹터 단위로 나타냅니다.
long long read_cnt;
:- 읽은 섹터의 수를 나타내는 카운터입니다.
long long write_cnt;
:- 쓴 섹터의 수를 나타내는 카운터입니다.
struct channel
channel
구조체는 ATA 채널(컨트롤러)을 나타냅니다. 각 채널은 최대 두 개의 디스크를 제어할 수 있습니다.
c코드 복사
struct channel {
char name[8]; /* Name, e.g. "hd0". */
uint16_t reg_base; /* Base I/O port. */
uint8_t irq; /* Interrupt in use. */
struct lock lock; /* Must acquire to access the controller. */
bool expecting_interrupt; /* True if an interrupt is expected, false if
any interrupt would be spurious. */
struct semaphore completion_wait; /* Up'd by interrupt handler. */
struct disk devices[2]; /* The devices on this channel. */
};
char name[8];
:- 채널의 이름을 저장합니다. 예를 들어, "hd0"과 같은 형식입니다.
uint16_t reg_base;
:- 채널의 기본 I/O 포트를 나타냅니다. 하드웨어 레지스터가 있는 주소입니다.
uint8_t irq;
:- 채널이 사용하는 인터럽트 번호입니다.
struct lock lock;
:- 컨트롤러에 접근할 때 사용되는 락입니다. 다중 스레드 환경에서 동시 접근을 제어합니다.
bool expecting_interrupt;
:- 인터럽트가 예상되는지 여부를 나타내는 플래그입니다. 인터럽트 핸들러가 사용합니다.
struct semaphore completion_wait;
:- 인터럽트 핸들러에 의해 사용되는 세마포어입니다. 인터럽트 핸들러가 완료되었음을 나타냅니다.
struct disk devices[2];
:- 이 채널에 연결된 두 개의 디스크를 나타냅니다. 각 채널은 최대 두 개의 디스크(마스터와 슬레이브)를 제어할 수 있습니다.
요약
disk
구조체는 개별 디스크의 정보를 나타내며, 디스크의 이름, 채널 포인터, 디바이스 번호, ATA 여부, 용량, 읽기/쓰기 카운터를 포함합니다.channel
구조체는 ATA 채널(컨트롤러)의 정보를 나타내며, 채널의 이름, I/O 포트, 인터럽트 번호, 락, 인터럽트 기대 여부, 세마포어, 그리고 채널에 연결된 두 개의 디스크를 포함합니다.
이 구조체들은 디스크 하드웨어와의 상호작용을 관리하고, 디스크의 상태와 동작을 추적하는 데 사용됩니다.