I 노드 및 파일 설명자(간단한 버전)

I 노드 및 파일 설명자(간단한 버전)

저는 현재 운영 체제 과정을 수강하고 있는 수학 학부생이지만 컴퓨터 과학에 대한 배경 지식이 거의 없습니다.

내가 아는 기본 사항은 다음과 같습니다. 운영 체제는 정확히 두 부분으로 구성됩니다.

  1. Linux의 모든 것을 파일로 처리할 수 있는 파일 관리 시스템
  2. 하드 드라이브 및 기타 장치를 제어하는 ​​장치 드라이버

이제 애플리케이션 A를 실행하고 애플리케이션 A를 실행하려면 하드 디스크에서 메모리로 애플리케이션 A의 실행 파일을 로드해야 한다고 가정합니다.

이제 그것을 달성하는 방법에 대한 내 생각은 다음과 같습니다. 이것이 맞는지 확실하지 않으며 도움을 주시면 정말 감사하겠습니다.

  1. 운영 체제의 파일 관리 시스템은 응용 프로그램 A를 실행하려면 하드 디스크에 응용 프로그램 A의 실행 파일이 필요하다는 것을 알고 있습니다. 이 파일의 주소는 파일 설명자 테이블에서 제공됩니다(확실하지는 않지만 주소를 지정하고 싶은지 추측합니다). 파일 A. out의 주소는 2475이고 파일 설명자 테이블에는 파일 A.out의 주소와 프로세스가 파일에서 읽을 포인터를 저장하는 변수 i가 있습니다. 다른 프로세스의 설명자 테이블이 다른가요? 이 파일 설명자 테이블이 RAM에 저장되어 있습니까?)

  2. 이제 우리가 다루어야 할 것에 대한 충분한 정보가 있으므로 "버프"(메모리 공간이라고 가정)라는 빈 공간으로 시작합니다. 이제 하드 드라이브를 처리하는 장치 드라이버는 아마도 주어진 공간으로 시작될 것입니다. 하드 드라이브 정보 위치를 업로드하고 "버프"에 업로드합니다.

이것이 나의 이해입니다. 제가 이해한 내용이 사실과 너무 모순된다면 용서해 주십시오. 내 개념을 명확히 하는 방법에 대한 도움과 조언이 필요합니다.

편집 1: 응용 프로그램의 실행 파일을 메모리에 로드한다고 가정하면 실제로 응용 프로그램의 실행 파일을 열 때 열리는 파일 수에 대한 인덱스인 파일 설명자가 있습니다. 이제 이 파일 설명자는 파일 테이블을 가리킵니다(하나만 있습니다). 커널의 파일 테이블에는 해당 파일을 가리키는 파일 설명자 수, 현재 모드 및 ID(메모리에 상대적인지)와 같은 파일 세부 정보가 저장됩니다. 설명자 테이블은 동일한 리소스를 가리킬 수 있습니다.

답변1

이것이 강좌에서 배운 내용이라면 강좌의 질에 심각한 의구심을 갖게 됩니다. 운영 체제 및 디스크 액세스 기능에 대한 완전한 설명은 Q&A 사이트의 범위를 훨씬 벗어납니다. 그래서 많은 세부 사항과 뉘앙스가 누락된 간략하고 큰 그림 설명을 드리겠습니다. 이것은 또한 총체적인 단순화입니다.

운영 체제는 두 가지 기본 기능 이상의 기능을 수행할 수 있습니다. 이는 사용 중인 용어의 정확한 정의와 사용 중인 운영 체제(예: 운영 체제에 GUI가 포함된 Windows)에 따라 다소 다르지만 최소한 다음과 같은 기능이 포함됩니다.

  • 작업 일정
  • 메모리 관리
  • 파일/파일 시스템 액세스
  • 프로세스 관리 및 프로세스 커뮤니케이션
  • 네트워킹

따라서 설명을 검토하려면 다음을 수행하십시오.

운영 체제의 파일 관리 시스템은 응용 프로그램 A를 실행하려면 하드 디스크에 응용 프로그램 A의 실행 파일이 필요하다는 것을 알고 있습니다. 이 파일의 주소는 파일 설명자 테이블에서 제공됩니다.

아뇨. 운영 체제의 파일 관리 시스템이 아닙니다. 첫 번째 프로세스(다른 형태의 init)를 제외하고 프로세스는 모두 다른 프로세스에 의해 생성됩니다. 예를 들어, ls터미널에서 작업을 수행하는 경우 사용 중인 셸은 운영 체제에 프로그램을 로드하도록 요청합니다.

Linux 및 Unix에서 "파일 설명자"라는 용어는 과정에서 의미하는 것과 다른 의미를 가질 수 있습니다. (적어도 지금은) "파일 설명자 테이블"을 "i-노드 테이블"로 바꿔야 합니다.

그런 다음 운영 체제의 파일(시스템) 기능은 i-node 테이블에서 디스크의 파일 위치를 검색합니다. i-노드 테이블은 파일 시스템의 일부이며 디스크에 저장됩니다. 그러나 운영 체제는 불필요한 디스크 액세스를 방지하기 위해 메모리에 복사본(캐시)을 유지합니다.

그렇다면 파일을 열면 어떻게 될까요? 사용자 프로세스는 파일 이름을 사용하여 운영 체제에 대한 파일 열기 호출을 만듭니다. 운영 체제는 이름을 디스크의 위치로 변환하고(I-노드 테이블 사용) 파일이 다시 닫힐 때까지 나중에 파일을 참조할 수 있도록 파일 설명자를 할당합니다.

아래에서 운영 체제의 장치 기능은 디스크 컨트롤러에게 디스크의 특정 섹터를 메모리에 로드하여 파일 시스템 기능이 이를 바이트 또는 블록 스트림으로 변환할 수 있도록 지시합니다.

답변2

I 노드 및 파일 설명자(간단한 버전)

  • 프로세스는 i-노드에서 디렉토리 목록을 찾습니다.
  • 그런 다음 i-노드를 사용하여 파일을 엽니다.
  • open 호출은 파일 설명자 테이블에 인덱스를 반환합니다.
  • 다른 모든 파일 시스템 호출은 이 파일 설명자를 사용합니다.

파일 설명자 인덱스는 프로세스의 사용자 공간에 저장됩니다. 테이블은 커널 공간에 있습니다(편집할 수 있으면 보안이 깨질 수 있습니다). 파일 설명자 테이블의 필드에는 파일의 i-노드, 조회 오프셋, 읽기 및 쓰기 플래그(읽기 및/또는 쓰기 가능) 등이 포함됩니다.

각 프로세스에는 자체 파일 설명자 테이블이 있습니다. 프로세스에서 어떤 파일을 열었는지 추적합니다. 권한 확인은 파일이 열려 있을 때만 발생하므로 커널은 이를 추적해야 합니다. 이것이 파일 설명자 테이블이 커널에 있고 존재하는 이유입니다(보안 없이 프로세스가 스스로 추적할 수 있음).

관련 정보