CS

cs 스터디 1주차 Computer Architecture & Java

SeungbeomKim 2022. 9. 21. 03:25
반응형

1회차 공부할 내용

  1. Computer Architecture
    • 컴퓨터 구조 기초
    • 컴퓨터의 구성
    • CPU 작동원리
    • 캐시 메모리
  2. Java
    • 컴파일 과정
    • Java Virtual Machine
    • Call By Value / Call By Reference
    • Casting
    • Auto Boxing / Auto Unboxing
    • Thread

컴퓨터 구조 : 컴퓨터는 하드웨어, 소프트웨어, 펌웨어 3가지로 이루어져 있다.

하드웨어 : 손으로 만질 수 있는 형태가 있는 장치들 

ex) 중앙처리장치(CPU)(연산장치, 제어장치), 기억장치(주기억장치(RAM,ROM), 보조기억장치(하드디스크, SSD, CD, USB 등), 입출력장치(프린트, 키보드, 마우스 등)

CPU(Central Processing Unit) => 기억, 해석, 연산, 제어 4대 주요 기능 담당

RAM(Ramdom Access Memory) => 사용자가 자유롭게 내용을 읽고 쓰고 지울 수 있는 기억장치, 컴퓨터가 켜지는 순간부터 CPU는 연산을 하고 동작에 필요한 모든 내용이 전원에 유지되는 내내 RAM에 저장된다.

ROM(Read-Only Memory) => 한번 기록한 정보가 전원 유지와 상관없이 반영구적으로 기억되며, 삭제나 수정이 불가능하다.

반면, RAM은 삭제나 수정이 가능하지만, 전원이 유지되지 않으면 내용이 사라진다.

 

보조기억장치는 주기억장치의 단점을 보완하기 위한 기억장치이다(속도는 느리지만, 내용의 저장을 위해 사용 (ROM의 단점 보완)) 

CPU와 직접적인 교류가 불가능하다.

 

소프트웨어 : 손으로 만질 수는 없지만 하드웨어를 움직일 수 있게 하는 명령어들의 모임

ex) 시스템 소프트웨어, 응용 소프트웨어

시스템 소프트웨어 : 하드웨어 시스템의 운영을 제어하고 관리해주는 역할 담당

=>어셈블리 언어와 같이 저수준 언어로 작성되므로 기본 수준의 하드웨어와 쉽게 상호작용한다.

ex) MacOS, Linux, 어셈블러, 디버거, 컴파일러 등..

응용 소프트웨어 : 사용자가 어떠한 목적을 달성하기 수행할 수 있도록 도와주는 역할 담당

=>우리가 사용하는 "프로그램"들은 모두 응용 프로그램이다.

ex) word, excel, powerpoint, 카카오톡, 라인, 이메일, 등...

 

CPU의 동작 과정

  • 주기억장치는 입력장치에서 입력받은 데이터 또는 보조기억장치에 저장된 프로그램을 읽어온다.
  • CPU는 프로그램을 실행하기 위해 주기억장치에 저장된 프로그램 명령어와 데이터를 읽어와 결과를 다시 주기억장치에 저장한다.
  • 주기억장치는 처리 결과를 보조기억장치에 저장하거나 출력장치로 내보낸다.
  • 제어장치는 위에 과정들이 순차적으로 실행될 수 있게 도와주는 역할을 한다.

캐시 메모리란?

처리속도가 다른 두 장치 간의 속도 차이에 따른 병목 현상을 줄이기 위한 범용 버퍼 메모리이다.

CPU가 주기억장치에서 데이터를 읽어 올 때, 자주 사용하는 데이터를 캐시 메모리에 저장하고 다음에 사용할 때 캐시 메모리에서 가져오면 속도가 빨라진다.

  • L1 : CPU 내부
  • L2 : CPU와 RAM사이
  • L3 : 메인보드에 존재

 캐시의 지역성 : 시간 지역성, 공간 지역성

  • 시간 지역성: 최근에 사용된 캐시 데이터가 캐시에서 다시 재 참조될 확률이 커진다.
  • 공간 지역성 : 최근에 사용된 캐시 데이터의 주변에 있는 데이터가 캐시로부터 참조될 확률이 커진다.

Java 

컴파일 과정

1. 개발자가 자바 소스코드 작성(.java)

2. 자바 컴파일러가 자바 소스코드(.java)파일을 읽어 바이트코드(컴퓨터는 해독x, JVM(자바 가상 머신) 해독o)로 컴파일한다.(.class)

3. 컴파일된 바이트코드(.class)를 JVM의 클래스로더(Class Loader)에게 전달

4. 클래스로더(Class Loader)는 동적로딩을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역(JVM의 메모리)에 올린다.

5. 실행엔진(Execution Engine)은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행

 

Java Virtual Machine(JVM, 자바 가상 머신)

 

자바 바이트코드를 실행할 수 있는 주체이다. 일반적으로 인터프리터 JIT 컴파일 방식으로 다른 컴퓨터 위에서 바이트코드를 실행할 수 있도록 구현되나 jop 자바 프로세서처럼 하드웨어와 소프트웨어를 혼합해 구현하는 경우도 있다. (이론적으로는 100% 하드웨어 구현도 가능하나 비효율적이다) 자바 바이트코드는 플랫폼에 독립적이며 모든 자바 가상 머신은 자바 가상 머신 규격에 정의된 대로 자바 바이트코드를 실행한다. 우리가 컴파일할 수 있는 이유도 자바 가상 머신이 있기 때문이다.

<출처>(https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EA%B0%80%EC%83%81_%EB%A8%B8%EC%8B%A0

 

Call by value / Call by reference

값에 의한 호출 : 메서드 호출 시에 사용되는 인자의 메모리에 저장되어 있는 값을 복사하여 보낸다. 함수 안에서 인자값이 변경되더라도 외부 변수 값 변화 x

참조에 의한 호출 :  메서드 호출 시에 사용되는 인자의 메모리에 저장되어있는 주소를 참조해서 보낸다. 함수 안에서 인자 값이 변경되면, 외부 변수 값 변화 o

 

Casting(형변환)

=> 서로 다른 타입의 피연산자끼리 연산을 할 때, 같은 타입으로 변경해주기 위함

ex) int num = (int)7.9

=>다음과 같이 형변환을 해주었기 때문에 0.9의 데이터의 데이터는 없어지고, 7의 값을 반환하게 된다.

업캐스팅(자식클래스->부모클래스로 형 변환)

다운캐스팅(업캐스팅 한 것을 원래형으로 되돌려주는 변환)

 

public class Person {...} 

public class Student extends Person {...}

Person human= new Student(); //업캐스팅

Student jaeyoon = (Student)human; //다운캐스팅

 

Auto boxing / AutoUnboxing

 

boxing : 자바 컴파일러가 primitive data type을 그에 상응하는 wrapper class로 자동 변환 시켜주는 것.

ex) int -> Integer, string -> String

Unboxing : 자바 컴파일러가 wrapper class를 primitive data type으로 자동 변환 시켜주는 것.

ex) Integer -> int, String -> string

 

Thread

  • 메모리를 할당받아 실행중인 프로그램을 프로세스라고 한다.(시작점과 종료점을 가짐)
  • 실행중에 멈출 수 있으며 동시에 수행이 가능하다.
  • 어떠한 프로그램 내에서 특히 프로세스 내에서 실행되는 흐름의 단위

<출처> https://sundrystore.tistory.com/17 [잡다창고:티스토리]

 

java 캐스팅정리

안녕하세요 이번에는 자바의 캐스팅에 대하여 알아보려고합니다. 캐스팅이란 무엇인가! 캐스팅(Casting)이란? 캐스팅이란 모든 연산을 진행할때에는 같은 타입의 피연산자끼리만 수행이 가능하

sundrystore.tistory.com

https://raccoonjy.tistory.com/15

 

자바(Java)의 기초 박살내기 - 스레드(Thread)

이번 시간에는 스레드에 대해서 공부하겠습니다. 스레드란 어떠한 프로그램내에서 특히 프로세스 내에서 실행되는 흐름의 단위입니다.  1. Thread - 메모리를 할당받아 실행 중인 프로그램을 프

raccoonjy.tistory.com

 

반응형