hello 프로그램 실행 -> hello world 출력

Khan·2024년 9월 23일

"hello" 프로그램 실행 과정 상세 설명

"hello" 프로그램의 실행은 사용자의 간단한 명령어 입력으로 시작되지만, 실제로는 운영체제, 하드웨어, 그리고 여러 시스템 구성 요소 간의 복잡한 상호작용을 포함합니다.

하지만 여기서는 시스템 하드웨어 조직과 동작에 대해서만 간단히 이해했다고 가정하고 작성 되었다는 점 참고 부탁드립니다

1. 명령어 입력

  1. 사용자가 shell에 "./hello"를 입력합니다.
  2. 각 문자는 USB 컨트롤러(키보드 컨트롤러)에 의해 감지되어 프로세서에 전달됩니다.
  3. 운영체제가 문자를 해석합니다.
  4. 해석된 문자는 shell 프로그램에 전달되어 커널 버퍼에 임시 저장됩니다.

2. 명령어 실행 준비

  1. 사용자가 Enter 키를 누르면, shell은 입력이 완료되었음을 인식합니다.
  2. Shell은 입력된 명령어를 파싱하여 실행할 프로그램("./hello")을 식별합니다.
  3. 시스템 콜을 호출하여 "hello" 프로그램을 메모리에 로드합니다.

3. 프로그램 로딩

  1. 운영체제는 "hello" 프로그램의 실행 파일을 디스크에서 읽어옵니다.
  2. 프로그램의 코드와 데이터가 메모리에 로드됩니다.
    • 많은 시스템에서 DMA(Direct Memory Access)를 사용하여 CPU의 개입 없이 디스크에서 메인 메모리로 데이터를 전송합니다.

4. 프로그램 실행

  1. hello 파일 내의 기계어 명령어들이 순차적으로 실행됩니다:
    • "hello, world\n" 문자열의 주소가 데이터 섹션에서 로드됩니다.
    • printf() 함수가 호출되어 문자열을 출력합니다.

5. 출력 처리

  1. 운영체제는 출력 문자열을 적절한 장치 드라이버(모니터)로 전달합니다.
  2. 장치 드라이버는 하드웨어 특정 명령을 사용하여 문자열을 화면에 표시합니다.

용어정리

  • 커널 버퍼
    • 운영 체제 커널에서 사용하는 임시 데이터 저장 영역입니다. 주로 입출력(I/O) 작업을 관리하고 최적화하는 데 사용한다.
  • 시스템 콜
    • 시스템콜은 프로그램이 운영체제의 커널에게 서비스를 요청하는 프로그래밍 방식. 즉, 프로그램이 운영체제와 상호작용하는 방식이다. 시스템 콜은 API를 통해 운영체제의 서비스를 사용자 응용 프로그램에게 제공해준다. 시스템 콜은 커널 시스템으로의 유일한 진입점이며, 리소스를 필요로 하는 모든 프로그램은 시스템 콜을 사용한다.
  • USB 컨트롤러
    • 컴퓨터와 USB 장치 간의 통신을 관리하는 하드웨어.
    • USB 프로토콜에 따라 데이터 패킷을 송수신하는 역할이다.
  • 키보드 컨트롤러
    • 키보드 컨트롤러는 키보드의 입력을 관리하고 이를 컴퓨터 시스템에 전달하는 전용 하드웨어
    • 사용자가 누른 키를 감지하여 눌린 키에 해당하는 스캔 코드를 생성하여 컴퓨터 시스템에 전송한다.
  • USB로 연결된 키보드
    1. 키보드 내부의 컨트롤러가 키 입력을 감지하고 스캔 코드를 생성
    2. 이 데이터는 USB 프로토콜에 맞게 패킷화
    3. USB 컨트롤러를 통해 컴퓨터 시스템에 전송
  • DMA(Direct Memory Access) : 직접 메모리 접근
    • 컴퓨터 시스템에서 CPU의 개입 없이 주변장치와 메인 메모리 사이에 직접 데이터를 전송할 수 있게 해주는 기능이다.
      대량의 데이터 전송 시 CPU가 모든 작업을 처리하면 다른 중요한 작업을 수행하기 어렵습니다. 또한 CPU를 거치지 않고 직접 전송하므로 데이터 전송 속도가 빨라집니다.
    • DMA는 현대 컴퓨터 시스템에서 중요한 역할을 합니다. 특히 멀티미디어(영화 스트리밍), 네트워크 통신(인터넷 사용), 고성능 저장장치(대용량 파일 전송) 등에서 시스템이 더 빠르고 효율적으로 작동할 수 있게 해줍니다.
profile
끄적끄적 🖋️

0개의 댓글