The Fetch and Execute Cycle: machine language
-
각 컴퓨터(운영체제)마다 고유한 muchine language가 존재해 해당 언어로 표현되어야만 직접 실행할 수 있다(다른 언어로 작성된 프로그램을 먼저 기계어로 번역하면 사용할 수있다)
-
cpu가 동작할때 main memory(RAM(random access memory))에 저장되는데 일련의 위치(주소)로 구성된다
-
cpu의 기본적인 동작 원리는 메모리에서 명령어를 가져와 실행하고 다른 명령어를 가져오는 것을 반복한다 이것을 fetch-and execute cycle(가져오기 및 실행 주기)라고 한다.
-
cpu에는 Arithmetic Logic Unit(ALU)라는 연산 수행 프로세스와 적은 숫자를 저정할 수 있는 registers(캐시??)가 포함되어 있다.
-
cpu에는 특수 목적 레지스터도 있는데 그중 가장 중요한 것은 program counter이다(섹선 1.4로)
-
컴퓨터는 프로그램을 이해하지 않고 기계적으로 실행하는데 이는 컴퓨터가 transistors라는 수백만 개의 작은 스위치로 이루져있어서 그렇다 트랜지스터는 서로 연결되어 한 스위치의 출력이 다른 트랜지스터를 on off 하는 방식으로 작동한다
-
컴퓨터에서 어떠한 장치를 사용하기 위해선 cpu가 실행하는 소프트웨어로 구성된 장치 드라이버가 존재한다
-
장치를 통해 cpu에 데이터가 들어왔을때 cpu가 알고 처리할 수 있는 방법 중 가장 간단하고 매우 비효율적인 방법으로 cpu가 계속해서 데이터가 들어오는지 확인하는 방법인데 이것을 polling이라고 한다
-
이러한 이유로 일반적으로 interrupts를 사용한다. 인터럽트는 장치가 cpu에 보내는 신호로 이를 받은 cpu는 모든 작업을 제쳐두고 인터럽트 신호를 처리한뒤 다시 작업으로 돌아간다.
-
인터럽트 신호를 발생시키고 처리후 다시 cpu를 복귀시키는 과정을 interrupt handler가 수행한다. 이를 통해 asynchronous events(비동기 이벤트)처리할 수 있다.
-
timesharing은 비선점형 기법으로 대표적으로 round robin기법이 존재한다
-
바이트 코드를 커쳐 jvm을 통해 기계어로 만드는 이유는 여러 환경에서 사용하기 위함과 더불어 고급언어 컴파일러는 복잡한 프로그램이지만 바이트 코드를 기계어로 만드는 인터프리터는 작고 간단해서 만들어 적용시키기가 쉽다
-
java는 코드를 컴파일러를 통해 바이트 코드로 변환하고 바이트 코드를 jvm에서 인터프리터와 jit컴파일러를 통해 기계어로 변환된다. 때문에 java가 아닌 다른 언어로 작성된 바이트 코드라도 jvm을 통해 변환할 수 있다.
-
subroutine은 한가지 역할을 담당하는 부분을 메서드로 분리 시키는것을 말함?
-
문제를 더이상 쪼갤 수 없는 범위까지 쪼개서 직접 해결할 수 있는 문제로 나아가는 접근 방식을 top-down programming(하향식 프로그래밍)이라고 한다
-
데이터 구조 설계가 매우 중요함
-
프로그램 재사용을 위해 하향식 설계와 상향식 설계가 결합되는 경우가 많음(재사용 단위는 모듈식)
-
모듈 내에서 일어나는 일이 결과에 관련이 없고 알 필요가 없다 이것을 information hiding이라고 한다.
-
정보 은닉을 지원하는 모듈을 활용해 발전한 소프트웨어 엔지니어링 방식이 object-oriented programming(OOP, 객체 지향 프로그래밍)이라고 함
-
메세지가 서브루틴 호출임
-
같은 메세지를 보내도 다른 답이 호출되는 것을 polymorphism(다향성)이라고 함
-
프로토콜은 통신이 어떻게 진행되는지에 대한 상세한 사양
-
인터넷에서 기본 프로토콜을 internet protocol(IP)와 ip를 사용하여 전송된 데이터가 컴퓨터에서의 수신을 보장하는 Transmission Control Protocol(TCP)(전송 제어 프로토콜)
-
인터넷을 통한 통신은 모두 packets 형태라 하고 패킷은 다른 컴퓨터로 전송되는 데이터와 가야할 주소 지정 정보로 구성된다. 안에 내용물을 담은 봉투라고 생각하면된다. 그러므로 반환 주소도 담겨 있으면 패킷에는 일정양의 데이터만 담을 수 있어 큰 데이터는 여러 패킷으로 분활하여 전송한다.
-
컴퓨터마다 고유한 ip주소가 존재하면 domain names로 식별된다.