전체 글 53

9장 운영체제 시작하기

운영체제 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 프로그램 컴퓨퍼가 부팅될 때 메모리 내 커널 영역 공간에 따로 적재되어 실행 커널 영역을 제외한 나머지 영역은 사용자 영역으로 사용자가 이용하는 응용 프로그램공간 사용자 영역의 메모리 자원 관리 응용프로그램들의 CPU자원 관리 커널 운영체제에서 가장 핵심적인 서비스 제공 자원 접근하고 조작 기능 프로그램을 안전하게 실행되게 하는 기능커널은 아니지만 컴퓨터와 상호작용하는 통로 GUI 윈도우 바탕화면과 같이 사용자와 컴퓨터가 상호작용 CLI 커멘드 라인으로 컴퓨터와 상호작용 이중모드 CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식 사용자 모드 운영체제 서비스를 제공받을 수 없는 실행 모드 ..

8장 입출력장치

장치 컨트롤러 입출력 장치를 다루기 까다로운 이유 입출력장치에 종류가 많다.(비규격화) 일반적으로 CPU와 메모리의 데이터 전송률은 높지만 입출력장치의 데이터 전송률은 낮다.(전송률의 차이)결론 : 입출력장치는 컴퓨터에 직접 연결되지 않고 장치 컨트롤러를 통해 연결된다. 장치 컨트롤러의 역할 CPU와 입출력장치 간의 통신 중개 오류 검출 데이터 버퍼링 버퍼링 전송률이 높은 장치와 낮은 장치 사이에 주고 받는 데이터를 버퍼에 임시저장하여 전송률을 비슷하게 맞추는 방법 내부 구조 데이터 레지스터 CPU와 입출력장치 사이에 주고받을 데이터가 담기는 레지스터 버퍼링할 때 임시 저장하는 곳 최근 주고 받는 데이터가 많은 입출력장치에서는 RAM을 사용하기도 한다.상태 레지스터 입출력장치의 입출력 작업 준비, 완료,..

7장 보조기억장치

하드디스크(자기 디스크) 자기적인 방식으로 데이터를 저장하는 보조기억장치 플래터라는 동그란 원판에 데이터가 저장된다. N극과 S극을 저장하는데 이는 0과 1의 역할을 수행한다. 내부 구조 스핀들 : 플래터를 회전시키는 구성 요소 RPM : 스핀들이 플래터를 돌리는 분당 회전수 단위 헤드 : 플래터를 대상으로 데이터를 읽고 쓰는 구성 요소 디스크 암 : 헤드를 원하는 위치로 이동시키는 장치 트랙 : 플래터를 여러 동심원으로 나눴을 때 그 중 하나의 원 섹터 : 트랙의 한 조각 블록 : 하나 이상의 섹터를 묶은 것 실린더 : 여러 겹의 플래터 상에서 같은 트랙이 위치한 곳을 모아 연결한 논리적 단위 데이터는 하드디스크의 섹터, 트랙, 실린더에 저장된다. 저장된 데이터에 접근하는 과정 탐색 시간 : 접근하려는..

6장 메모리와 캐시 메모리

RAM RAM에는 실행할 프로그램의 명령어와 데이터가 저장된다. 전원을 끄면 저장된 명령어와 데이터가 모두 날라간다. 이러한 저장 장치를 휘발성 저장 장치라고 한다. 반대로 전원이 꺼져도 데이터가 날라가지 않는 장치를 비휘발성 저장 장치라고 한다. 하드디스크나 SSD등이 대표적으로 있다. 비휘발성 저장 장치는 CPU에 직접접으로 접근을 못하므로 보관할 대상을 저장하고 휘발성 저장 장치에는 실행할 대상을 저장한다. RAM의 용량과 성능 RAM의 용량이 크면 보조기억장치에서 실행할 프로그램을 가져오는 일이 줄어든다. 그렇다면 용량이 크면 프로그램을 가져오는 일이 줄기 때문에 성능이 용량에 비례해서 빨라질까? 정답은 그렇지 않다. RAM과 보조기억장치간 이동하는 속도는 같기 때문에 무한정으로 빨라지지 않는다...

5장 CPU 성능 향상 기법

CPU의 성능을 높히는 방법 클럭 속도 향상 클럭은 헤르츠(Hz)단위로 측정한다. 클럭 속도를 높이면 빨라지지만 발열이 심각하게 높아져 한계가 있다. 코어와 멀티코어 기존에 있는 1개의 CPU를 여러개로 확장한다. 이를 멀티코어 CPU라고 한다. 코어마다 처리할 명령어들을 적절하게 분배하느냐에 따라 연산속도가 크게 달라진다. 스레드와 멀티 스레드 스레드 : 실행 흐름의 단위 하드웨어적 스레드 스레드 : 하나의 코어가 동시에 처리하는 명령어 단위 2코어 4스레드는 한번에 네개의 명령어를 처리할 수 있는 CPU이다. 이를 멀티스레드 프로세서 또는 멀티스레드 CPU라고 한다. 소프트웨어적 스레드 스레드 : 하나의 프로그램에서 독립적으로 실행되는 단위 하나의 프로그램의 여러 부분이 동시에 실행될 수도 있는데 이..

4장 CPU의 작동 원리

ALU CPU 내부에서 계산을 담당하는 부분이다. 받는 정보 피연산자, 제어신호 레지스터를 통해 피연산자를 받는다. 제어 장치로부터 수행할 연산을 알려주는 제어 신호를 받는다. 내보내는 정보 연산 수행 결과값, 플래그 연산을 수행한 결과값을 일시적으로 레지스터에 내보낸다. 이유 : 연산할 때 마다 결과를 메모리에 저장하면 메모리에 자주 접근하면 느리기에 레지스터에 보내서 임시 저장한다. 플래그 연산에 대한 추가적인 결과 정보를 내보내야 하는 경우가 있는데 이러한 연산 결과에 대한 추가적인 상태 정보를 플래그라고 한다. 플래그 종류는 다양하게 있는데 이러한 플래그들은 플래그 레지스터에 저장된다. 제어장치 제어장치는 제어 신호를 내보내고 명령어를 해석하는 부품 컴퓨터 부품들을 관리하고 작동시키기 위한 일종의..

3장 명령어

컴퓨터는 0과 1만을 이해한다. 하지만 2진수로만 이용하여 컴퓨터에게 명령어를 실행시키면 사람이 사용하기 어렵다. 그렇기에 고급언어라는 것을 만들어서 컴퓨터에게 명령을 시킨다. 고급언어를 컴퓨터가 이해할 수 있는 저급언어로 변환한다. 컴퓨터가 이해할 수 있는 저급언어에는 단순히 0과 1로 만들어져 있는 기계어가 있으며 기계어를 사람이 조금 더 이해하기 쉽게 변환한 어셈블리어가 있다. 이러한 저급언어는 하드웨어와 밀접한 관계를 가진 개발자들이 사용하며 개발한다. 정리 고급언어 -> 저급언어 변환이 필요 고급언어 : 사람들이 이해하기 쉬운 언어 기계어 : 0과 1의 명령어 비트로 이루어진 언어 어셈블리어 : 0과 1로 표현된 기계어를 읽기 편한 형태로 변역한 언어 컴파일 방식, 인터프린터 방식 대표적인 컴파..

2장 데이터

정보단위 컴퓨터는 0또는 1밖에 이해를 못한다. 0과 1을 나타내는 가장 작은 정보 단위를 비트(bit)라고 한다. 바이트를 제외한 다른 단위들은 이전 단위를 1000개 묶어 표현한다. 1바이트(byte) = 8bits 1킬로바이트(kB) = 1000바이트 1메가바이트(MB) = 1000킬로바이트 1기가바이트(GB) = 1000메가바이트 1024개를 묶어 표현한 단위는 KiB, MiB, GiB이다. 워드(word) 워드란 CPU가 한번에 처리할 수 있는 데이터 크기를 의미한다. 인텔의 x86 CPU는 32비트 워드 CPU(1워드가 32비트)이고 x64 CPU는 64비트 워드 CPU(1워드가 64비트)이다. 이진법 0과 1만으로 모든 숫자를 표현하는 방법을 이진법이라 한다. 이진법으로 표기한 수를 이진수,..

1장 컴퓨터 구조 시작하기

컴퓨터 구조를 공부하는 이유? 입출력만 집중하는 개발을 넘어 문제 해결, 성능, 용량, 비용 문제까지 고려하는 월클 개발을 위하여!컴퓨터 구조 컴퓨터가 이해하는 정보 데이터 숫자, 문자, 이미지, 동영상과 같은 정적 정보 명령어 데이터를 움직이고 컴퓨터를 작동시키는 정보 컴퓨터의 네 가지 핵심 부품 CPU ALU(산술논리연산장치) : 컴퓨터 내부에 수행되는 계산은 대부분 ALU에서 수행한다. 제어장치 : 제어 신호라는 전기 신호를 내보내고 명령어를 해석하는 장치이다. 레지스터 : CPU 내부의 작은 임시 저장 장치이다. 여러 레지스터가 존재하고 각기 다른 이름과 역할을 가지고 있다. 메모리 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품이다. 프로그램이 실행되려면 반드시 메모리에 저장되어 있어야..

[LeetCode] 23. Merge k Sorted Lists

문제(23. Merge k Sorted Lists) linked list들이 들어있는 k배열이 있다. 그리고 각각의 linked list는 오름차순으로 정렬되어 있다. 배열 k에 있는 linked list들을 합쳐 오름차순으로 정렬한 linked list를 리턴하라. 문제에 대한 나의 생각 접근 하는 방법에 따라 이 문제의 난이도가 천차만별이라 생각한다. 만약 모든 linked list들을 한개씩 비교하는 방식으로 접근하면 처음 설계할 때 매우 중요하다고 생각한다. 그래서 이러한 방식은 다음에 시도하기로 하고 다른 방법으로 접근했다. 아이디어 linked list의 값을 저장할 새로운 배열을 생성한다. 그리고 linked list들의 값을 모두 새로 생성한 배열에 저장한다. 그리고 sort()를 사용하여..