• 카테고리

    질문 & 답변
  • 세부 분야

    네트워크

  • 해결 여부

    해결됨

소켓과 파일, 그리고 시스템 콜에 대하여

24.03.23 21:52 작성 조회수 124

0

항상 좋은 강의 너무 감사합니다.

https://www.inflearn.com/questions/866611
위 질문에 대한 답변에서 '한 가지 중요한 사실은 Kernel 요소에 대한 User mode 접근은 모두 장치 '파일'로 이루어진다는 점 입니다.' 부분에서 추가적인 질문이 있습니다.

Kernel 요소에 대한 User mode 접근은 결국 시스템 콜을 통해서 이루어진다고 알고있습니다.

그렇게 되면 시스템 콜이 파일이라는 말씀이실까요?

물론 시스템 콜은 결국 함수이므로 파일에 코드가 작성된 형태이긴 하겠지만, 이것이 파일을 통해 이루어진다는 부분이 잘 와닿지 않습니다.

추가적으로 파일의 타입 중 소켓 타입이 있다는 것도 알게 되었는데,

그렇다면 네트워크 연결 시, 연결된 수 만큼 소켓이 생기고 그곳에 연결된 대상에 대한 정보를 포함한 정보들이 기록되는 형태인 것일까요..?

마지막으로 시스템 프로그래밍 관련해서 널널한 개발자님이 추천하시는 책이 있는지 궁금합니다.
감사합니다.

답변 3

·

답변을 작성해보세요.

1

네, 여러 개 소켓이 생성되는 것이 맞습니다. 소켓 프로그래밍을 한 번 해보는 것도 좋을 것 같습니다. 😄

1

아니오. 시스템 콜은 명령입니다. 보통 그 명령을 포함하는 함수를 시스템 콜이라 합니다. 그리고 그 시스템 콜이 입/출력 대상으로 간주하는 파일이 있을 텐데...제가 말하는 것은 바로 그 파일 입니다. 중요한 것은 사용자 모드 응용 프로그램 입장에서는 시스템 콜이 내부적으로 호출된다는 것을 알고 있을 뿐 실질적인 접근은 추상화된 파일에 대한 입/출력으로 가능하다는 것입니다.

그리고 TCP 연결의 개수 만큼 소켓의 개수도 증가합니다. 이런 이유로 서버에서는 많은 소켓(파일)을 개방해 입출력을 할 수 밖에 없고 자칫 효율이 떨어집니다. 이 때문에 OS의 비동기 입/출력 지원을 받는 방식이 높은 성능을 낼 수 있는 것이고요. (불필요한 지연이 현저히 줍니다.)

끝으로 시스템 프로그래밍 책으로 제가 추천드리는 것은 Windows Via C/C++ 5th 입니다. 참고하시기 바랍니다. 😄

신동훈님의 프로필

신동훈

질문자

2024.03.25

답변 너무 감사합니다!!!

혹시 TCP 연결의 개수 만큼 소켓의 개수가 증가한다는 의미가 결국은 소켓 파일이 여러개 생성되는 것을 의미하는게 맞을까요?

추가로 추천해주신 책도 잘 읽어보겠습니다!

감사합니다!

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.03.23

안녕하세요, 인프런 AI 인턴입니다.

신동훈님께서 질문하신 “소켓과 파일, 그리고 시스템 콜에 대하여”의 내용이 상당히 깊은 이해를 필요로 하는 부분인 것 같습니다. 질문의 주요 내용을 간략하게 요약드리면, 커널 요소에 대한 유저 모드 접근, 시스템 콜과 파일의 관계, 소켓 타입의 파일의 역할과 시스템 프로그래밍 관련 추천 도서에 대한 궁금증입니다.

이와 관련하여, 두 가지 질문에 대한 답변이 유용할 것 같습니다.

첫 번째, 시스템 콜과 파일의 관계에 대해 유용한 정보를 제공한 File과 Socket에 대해서 글에서 언급되었습니다. 이 질문에서는 시스템 콜이 커널의 기능에 접근하기 위해 사용되는 것은 맞지만, 실제로 파일 시스템을 통해 추상화 되어 사용자 모드와 커널 모드 사이의 인터페이스로 동작한다는 점이 설명되었습니다. 따라서, 시스템 콜 자체를 파일이라고 보는 것보다는 시스템 콜이 파일과 같이 사용자와 커널 사이의 인터페이스 역할을 한다고 이해하는 것이 더 정확할 것 같습니다.

두 번째, 소켓과 파일의 관계에 대해 설명한 소켓은 파일이라 하셨는데.. 글에서는 소켓이 TCP/IP 프로토콜에 대한 추상화된 인터페이스이며, 파일의 형태를 갖고 있어서 네트워크 통신 체계 및 장치에 대한 인터페이스로 동작한다고 설명하고 있습니다. 연결된 소켓이 정보를 기록하는 형태에 대한 귀하의 이해는 맞으며, 이 때 소켓은 네트워크 통신을 위한 특정 정보를 담고 있는 구조로 볼 수 있습니다.

시스템 프로그래밍에 대한 추천 도서는 직접적인 정보를 찾을 수 없었습니다만, 보통 이 분야에 대해서는 “고급 UNIX 프로그래밍”, “UNIX 네트워크 프로그래밍” 과 같은 고전적인 책들이 많이 추천되곤 합니다. 해당 주제에 대한 더 깊은 이해를 위해서는 이런 책들을 찾아보시는 것도 좋을 것 같습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.