인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

박상민님의 프로필 이미지

작성한 질문수

넓고 얕게 외워서 컴공 전공자 되기

User mode와 Kernel mode 그리고 가상화까지!

인터페이스로 File을 사용한다는 것

해결된 질문

작성

·

77

·

수정됨

0

 안녕하세요 강의 잘 듣고 있습니다. 감사합니다.

강의에서 Hello World가 화면에 출력하는 예시를 들어 설명하신 부분에서 Device file 이라는 인터페이스를 통해서 User Process와 Kernal이 상호작용한다고 하셨습니다.

 

이때, Device File에 무엇을 읽고 쓴다는 것은 Memory 나 Disk에 적재하는 과정이 될 거 같다는 생각이 듭니다. 맞을까요?

아래는 영상에서 설명한 예시에서 제가 생각한 과정입니다.

  1. Device File 에 "Hello world" 출력하라는 명령을 쓰기 위해 User -> Kernal -> H/W(Memory or Disk)

  2. "Hello World" 출력하기 위해서 Kernal -> H/W (영상에서 설명하신 부분)

총 두 번 일어나는 것이 맞는건가요?

뭔가 현대에는 최적화가 잘 되어서 1번으로 끝낼 수 있게 구성이 되어 있을 거라고 생각이 들긴 합니다.


*구글링으로 찾아본 내용

리눅스 파일의 종류엔 3가지가 존재

  1. 일반 파일: 데이터를 담을 수 있음

  2. 디렉토리 파일: 일반 파일을 담을 수 있음

  3. 특수 파일 (Socket, Device File, Named Pipe)

영상에서 언급해주신 Device File 은 특수파일에 해당
Device File은 특수파일의 하위 집합으로 character device file, block device file 두가지 타입이 있음.
특수 파일은 일반 파일과 달리 단순 운영체제와의 인터페이스로 데이터를 저장하는 행위는 하지 않음.

그럼 왜 파일이라고 하는건가? 일단, 리눅스는 "모든게 파일이다." 라는 철학을 갖고 있음. 그렇다면 왜 모든 걸 파일로 정의했는가?
=> 다양한 자원을 하나의 일관된 인터페이스로 추상화하여, 파일을 읽고 쓰는 방식으로 모든 자원(디스크, 장치, 네트워크 등)을 다룰 수 있도록 하기 위함

질문을 드렸지만, 궁금해서 구글링을 해서 찾아 아래 부분에 찾은 내용을 정리했습니다.
제가 찾은 내용이 좀 틀렸다면 정정해주시면 감사하겠습니다!



 

답변 1

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

우선 질문한 내용은 일부 수정이 필요하겠습니다.

  1. Device File에 "Hello world" 출력
    이 부분은 Device file에 "Hello world"라는 bit stream을 write하는 것 입니다.

  2. 이는 장치마다 다를 수 있습니다.

사용자 모드 응용 프로그램이 특정 장치로 정보를 전달하는 과정은 장치 파일에 대한 쓰기로 가능합니다. 이 과정에서 Buffered I/O가 이루어진다면 메모리가 필요합니다. 그리고 다시 커널 드라이버에서 실제 하드웨어로 정보가 전달되도록 하기 위해 또 다른 메모리가 필요하다면 같은 내용을 한 번 더 복사하게 될 수 있습니다.

검색엔진에서 찾아본 내용과 더불어 함께 생각해보시기 바랍니다. 참고로 '모든 것이 파일' 이라는 개념은 윈도우라 해서 크게 다르지 않습니다. 참고하시기 바랍니다. 😄

박상민님의 프로필 이미지
박상민
질문자

Buffered I/O 잘 배웠습니다. 감사합니다!