1.8 Systems Communicate with Other Systems Using Networks
1.8 시스템은 네트워크를 사용하여 다른 시스템과 통신한다
지금까지 시스템 투어에서 우리는 시스템을 하드웨어와 소프트웨어의 독립적인 집합체로 다루었습니다. 하지만 실제로 현대 시스템들은 종종 네트워크를 통해 다른 시스템들과 연결됩니다.
네트워크는 또 하나의 I/O 장치
개별 시스템의 관점에서 볼 때, 네트워크는 그림 1.14에서 보여지듯이 또 다른 I/O 장치로 볼 수 있습니다. 시스템이 메인 메모리에서 네트워크 어댑터( 랜 카드 )로 일련의 바이트를 복사할 때, 데이터는 예를 들어 로컬 디스크 드라이브가 아닌 네트워크를 통해 다른 기계로 전송됩니다.
마찬가지로, 시스템은 다른 기계에서 전송된 데이터를 읽고 이 데이터를 메인 메모리로 복사할 수 있습니다.
인터넷과 같은 전역 네트워크의 출현으로, 한 기계에서 다른 기계로 정보를 복사하는 것은 컴퓨터 시스템의 가장 중요한 용도 중 하나가 되었습니다. 예를 들어, 이메일, 인스턴트 메시징, 월드 와이드 웹, FTP, 텔넷과 같은 애플리케이션들은 모두 네트워크를 통해 정보를 복사하는 능력에 기반을 두고 있습니다.


예시: Telnet을 사용하여 원격으로 hello 실행하기
우리의 'hello' 예제로 돌아가서, 익숙한 텔넷(telnet) 애플리케이션을 사용하여 원격 기계에서 'hello' 프로그램을 실행할 수 있습니다. 로컬 기기에서 실행되는 텔넷 클라이언트를 사용하여 원격 기기의 텔넷 서버에 연결한다고 가정해 봅시다. 원격 기기에 로그인하고 셸을 실행하면, 원격 셸은 입력 명령을 기다립니다. 이 시점부터 'hello' 프로그램을 원격으로 실행하는 과정은 그림 1.15에 표시된 다섯 가지 기본 단계와 관련됩니다.
텔넷 클라이언트에 "hello" 문자열을 입력하고 엔터 키를 누르면 다음과 같은 과정이 진행됩니다:
- 1. 클라이언트 → 서버: 클라이언트는 'hello' 문자열을 텔넷 서버로 보냅니다.
- 2. 서버 → 셸: 텔넷 서버가 네트워크에서 문자열을 수신하면, 이를 원격 셸 프로그램으로 전달합니다.
- 3. 셸 실행 및 결과 반환: 원격 셸은 'hello' 프로그램을 실행하고 출력 라인을 텔넷 서버로 다시 전달합니다.
- 4. 서버 → 클라이언트: 텔넷 서버는 출력 문자열을 네트워크를 통해 텔넷 클라이언트로 전달합니다.
- 5. 클라이언트 출력: 텔넷 클라이언트는 이 출력 문자열을 우리의 로컬 터미널에 출력합니다.
클라이언트와 서버 간의 이러한 유형의 교환은 모든 네트워크 애플리케이션의 전형적인 모습입니다. 11장에서는 네트워크 애플리케이션을 구축하는 방법과 이 지식을 간단한 웹 서버를 구축하는 데 적용하는 방법을 배우게 될 것입니다.
Aside: The Linux Project
1991년 8월, 핀란드의 대학생이었던 리누스 토발즈(Linus Torvalds)는 새로운 유닉스 계열 운영 체제 커널을 발표했습니다.
그가 리눅스 개발을 시작하게 된 출발점은 교육용으로 만들어진 운영체제인 미닉스(Minix)였습니다. 이 미닉스는 앤드루 S. 타넨바움이 개발한 시스템입니다.
리누스 토발즈는 미닉스(Minix)라는 교육용 운영체제를 보고 영감을 받아 리눅스(Linux)를 만들었습니다. 미닉스는 앤드루 S. 타넨바움이 교육 목적으로 개발한 작은 유닉스 같은 운영체제였는데, 토발즈는 이 미닉스의 구조와 철학 일부를 참고하면서도 자신만의 운영체제 커널을 개발하기 시작했습니다. 그래서 초기 리눅스 커널은 미닉스와 비슷한 점들이 있었지만, 점차 독립적이고 더 확장성 있는 운영체제로 발전했습니다.
이후 이야기는 말할 것도 없이 유명해졌습니다. 리눅스는 기술적, 문화적으로 큰 영향력을 가진 현상으로 발전했습니다. GNU 프로젝트와 힘을 합쳐, 리눅스 프로젝트는 유닉스 운영체제의 커널과 모든 지원 인프라를 포함한 완전한 POSIX 규격 호환 버전을 개발하는 데 성공했습니다. 현재 리눅스는 휴대용 기기부터 메인프레임 컴퓨터에 이르기까지 매우 다양한 종류의 컴퓨터에서 사용되고 있습니다. 심지어 IBM 연구팀은 리눅스를 손목시계에 포팅하는 데 성공하기도 했습니다.