상냥한 세상 :: Introduction of Java-2.5(1)

본문으로 바로가기

Introduction of Java-2.5(1)

category Computer Science/Java 2020. 5. 16. 06:51

Java file , Class file

  • Java file
    확장자가 .java인 파일로서, 자바 언어로 소스 코드를 작성할 때 그 내용을 적는 파일을 뜻합니다. 
  • Class file
    확장자가 .class인 파일로서 Java file을 Java Compiler(자바컴파일, Introduction of Java-2편 참조)로 컴파일한 파일을 뜻합니다. 이클립스와 같은 IDE혹은 커멘드 라인에서 javac명령어를 통해 컴파일 했을때 나오는 파일입니다.

이 클래스 파일을 가지고 자바의 Class loader(클래스 로더)가 JVM으로 클래스 파일을 로딩합니다.

 

CLI (Command Line Interface)

  • CLI(Command Line Interface)
    마우스 등이 필요한 그래픽 유저 인터페이스(GUI:Graphic User Interface)가 아닌 키보드 만으로 컴퓨터에게 입력하게 하고 출력을 받는 방법을 총칭, 콘솔(Console)이라는 용어도 CLI를 뜻하는 말입니다. OS:Windows에선 커멘드 프롬프트 라인(Command Prompt Line), 명령줄 또는 명령행이라고 합니다. OS:Mac,Linux에선 터미널(Terminal)이라는 용어를 사용합니다.

    OS:Windows-terminal(command prompt line)
    ≫"시작">검색창 "cmd" 입력>"cmd.exe" or "명령 프롬프트"선택
    ≫"시작">"모든 프로그램">"보조 프로그램">"명령 프롬프트"선택

    OS:Mac-terminal
    ≫"Spotlight 검색">"Terminal"or"터미널"입력>실행
    ≫"파인더">"응용 프로그램">"유틸리티">"터미널"

Prompt

  • Prompt(프롬프트)
    컴퓨터가 입력을 받아들일 준비가 되었다는 것을 사용자에게 나타내기 위해 컴퓨터 단말기 화면에 나타내는 신호입니다.

    터미널 화면에서는 항상 새로운 줄이 시작할 때마다 글씨가 출력되어 있습니다.
    Mac OS의 기본 Shell인 bash 버전의 터미널에선 $ 기호가 표시되어있습니다.

Credit:https://eunguru.tistory.com/122

하지만 최근 zsh버전으로 넘어오면서 $는 %로 바뀌었습니다.

즉, % 나 $의 기호 앞에 사용자 이름이나 컴퓨터 이름, 혹은 현재 디렉터리 위치 등 다른 글자들이 있을 수도 있는데 이를 프롬프트(Prompt)라고 합니다. 바로 위의 그림에서 woojinson@woojinui-MacBookPro ~ % 라는 글자가 프롬프트의 예시입니다. 프롬프트는 컴퓨터의 현재 상태 등을 보여주는 동시에 쉘이 사용자의 명령을 받을 준비가 되었다는 것을 알려줍니다. 프롬프트가 나오면 사용자는 키보드로 명령을 입력할 수 있습니다. 

 

Kernel

  • Kernel(커널)
    OS의 핵심을 이루는 요소로서 컴퓨터내의 자원을 사용자 프로그램(User Application)이 사용할 수 있도록 관리하는 프로그램입니다. 즉 H/W 응용 프로그램 사이에서 인터페이스를 제공하여 응용 프로그램이 하드웨어에서부터 오는 자원을 관리하고 사용할 수 있게 해줍니다.

    (셸이 운영체계의 가장 바깥부분에 위치하여 사용자 명령에 대한 처리를 담당한다고 하면 커널은 하드웨어와 관련된 내부적인 역할을 담당합니다)

  • Kernel의 역할
    컴퓨터에 속한 자원들에 대한 접근을 중재 하는 것 입니다. 즉 OS에서 가장 중요한 구성요소로서, 입출력을 관리하고 소프트웨어로부터 요청 (System Call)을 컴퓨터에 있는 하드웨어 (CPU, 메모리, 저장장치, 모니터)가 처리할 수 있도록 요청(System Call)을 변환하는 역할을 합니다. (User은 셸을 이용하여 Kernel을 통해 하드웨어를 사용 할 수 있습니다.)

    정리하자면, 

    -보안: 커널은 컴퓨터 하드웨어와 프로세스의 보안을 책임집니다.

    -자원관리: 한정된 시스템 자원을 효율적으로 관리하여 프로그램의 실행을 원활하게 합니다. 특히 프로세스에 처리기를 할당하는 것을 스케줄링이라고 합니다.

    -추상화: 같은 종류의 부품에 대해 다양한 하드웨어를 설계할 수 있기 때문에 하드웨어에 직접 접근은 문제를 매우 복잡하게 만들 수 있습니다. 일반적으로 커널은 운영체제의 복잡한 내부를 깔끔하고 일관성 있는 인터페이스를 하드웨어에 제공하기 위해 몇 가지 하드웨어 추상화(같은 종류의 장비에 대한 공통 명령어의 집합)들로 구현됩니다. 이 하드웨어 추상화는 프로그래머가 여러 장비에서 작동하는 프로그램을 개발하는 것을 돕습니다. 

    ※더 깊게 설명하면 OS쪽으로 가기 때문에 이렇게 간단하게만 설명드리겠습니다. 
    커널은 곧 운영체제(OS)입니다. 모든 운영체제에서 명령어를 내리게 되면(셸을 통한) 어떠한 결과값이 나오는데, 이런 중간 다리 역할을 하는것을 커널이라고 합니다. 즉 모든 사용자의 명령어는 커널을 통해 처리됩니다. 

    S/W->커널->H/W
    H/W->커널->S/W

    -프로세스 관리: 프로세스에 CPU를 배분하고 작업에 필요한 제반 환경을 제공합니다

    -메모리 관리: 프로세스에 작업 공간을 배치하고 실제 메모리보다 큰 가상공간을 제공합니다.

    -파일 시스템 관리: 데이터를 저장하고 접근할 수 있는 인터페이스를 제공합니다.

    -입출력 관리: 필요한 입력과 출력 서비스를 제공합니다.

    -프로세스 간 통신 관리: 공동 작업을 위한 각 프로세스 간 통신 환경을 지원합니다.

  • System Call
    정의:사용자가 커널에 접근할 수 있는 유일한 수단(프로세스가 운영체제와 통신하기 위한 유일한 방법)으로서 응용프로그램에서 OS에게 어떠한 기능(시스템 자원)을 수행해달라고 하는 하나의 수단입니다. 시스템 호출은 시스템 함수들에 의해 이루어지는데, C언어의 printf(), write()같은 함수들입니다.

 

Shell 

  • Shell(셸)
    터미널을 통해 컴퓨터에 다양한 명령을 내릴 수 있도록 도와주는 프로그램
    입니다. 흔히 두 종류로 구분하는데, 명령 줄 셸 (CLI)과 그래픽 셸(GUI)로 구분됩니다. 셸은 Windows의 명령프롬프트와 비슷해 보이지만, 훨씬 더 강력한 프로그래밍 기능을 소유하고 있습니다.


  • 주요 셸 목록
    - sh
    - ksh
    - mksh
    - pdksh
    - csh
    - tcsh
    - bash
    - zsh
    - fish
    - rc
    - dash