분류 전체보기 193

컴퓨터 시스템의 구조와 저장 장치

컴퓨터 시스템의 구조 디바이스 컨트롤러와 로컬버퍼 디바이스 컨트롤러: 각각의 입출력 장치에는 컨트롤러가 있는데, 이는 해당 입출력 장치를 관리하는 일종의 작은 CPU이다(하드웨어). 로컬버퍼: 디바이스 컨트롤러는 들어오고 나가는 데이터를 임시로 저장하기 위한 작은 메모리 공간인 로컬 버퍼를 내장하고 있다. 로컬 버퍼는 주로 큐 형태로 구성되며, 선입선출 방식이다. 즉, 디바이스로부터 전송된 순서대로 데이터가 처리된다. DMA(Direct Memory Access) 원칙적으로 메모리는 CPU에 의해서만 접근할 수 있다. 따라서 CPU 외의 장치가 메모리의 데이터에 접근하기 위해서는 CPU에게 인터럽트를 발생시켜서 CPU가 컨트롤러의 로컬버퍼와 메모리 사이에서 데이터를 옮기는 일을 대신한다. 그러나 이 경우..

CS/Operating System 2023.12.23

운영체제란?

운영체제란? 운영체제(Operating System)란 컴퓨터 하드웨어 바로 윗단에 설치되는 소프트웨어를 말한다. 좁은 의미의 운영체제: 컴퓨터 전원을 켜면 운영체제는 이와 동시에 실행된다. 소프트웨어가 컴퓨터 시스템에서 실행되기 위해서는 메모리에 그 프로그램이 올라가 있어야 한다. 운영체제도 하나의 소프트웨어이기 때문에 전원이 켜짐과 동시에 메모리에 올라간다. 하지만 운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라간다면 한정된 메모리 공간의 낭비가 심할 것이다. 따라서 운영체제 중 항상 필요한 부분만 전원이 켜짐과 동시에 메모리에 올려놓고, 그렇지 않은 부분은 필요할 때 메모리에 올려서 사용하게 된다. 이때 메모리에 항상 올라가 있는 부분을 커널(Kernel)이라고 부르며 이를 좁은 의미의 운영체..

CS/Operating System 2023.12.20

가비지 컬렉션(Garbage Collection, GC)

가비지 컬렉션 가비지 컬렉션은 자바의 메모리 관리 방법 중 하나로, JVM의 Heap 영역에 동적으로 할당했던 메모리 중 더이상 사용되지 않는 메모리 객체를 모아 주기적으로 제거하는 프로세스를 말한다. C/C++ 언어의 경우 이런 가비지 컬렉션이 없기 때문에 개발자가 수동으로 메모리 관리를 해주어야 한다. 그러나 자바에서는 가비지 컬렉터가 대신 메모리 관리를 해주기 때문에 개발자는 메모리 관리나 메모리 누수(필요하지 않은 메모리를 계속 점유하고 있는 현상)에 신경쓰지 않아도 된다는 장점이 있다. [Stop The World, STW] 그러나 이러한 가비지 컬렉션에도 단점이 있다. 자동으로 처리해준다 해도 메모리가 언제 해제되는지 알 수 없어 제어하기 힘들며, 가비지 컬렉션이 동작하는 동안 다른 동작을 멈..

Language/Java 2023.12.19

JVM 구조와 메모리 영역

JVM(Java Virtual Machine) JVM은 자바 바이트코드(.class)를 해석하고 실행한다. JVM의 역할은 자바 애플리케이션을 클래스 로더를 통해 읽어 들여서 자바 API와 함께 실행하는 것이다. JVM 덕분에 자바 코드는 OS에 종속적이지 않을 수 있다. 하나의 자바 프로그램의 바이트 코드만으로도 각 OS에 맞는 JVM이 해석하고 실행하기 때문에 OS에 상관없이 실행이 가능하다. JVM의 특징은 다음과 같다. 스택 기반의 가상 머신 심볼릭 레퍼런스: 기본 자료형을 제외한 모든 타입(클래스, 인터페이스)을 명시적인 메모리 주소 기반의 레퍼런스가 아니라 심볼릭 레퍼런스를 참조한다. 즉 참고하는 클래스의 특정 메모리 주소를 참조 값으로 갖지 않고, 이름만 갖고 있다. 가비지 컬렉션: 클래스 ..

Language/Java 2023.12.19

JDK/JRE/JVM, 자바 프로그램의 실행 과정

JDK(Java Development Kit) JDK는 자바 개발 키트(Java Development Kit)의 약자로, 개발자들이 자바로 개발하는 데 사용되는 SDK(Software Development Kit)라고 생각하면 된다. JDK 안에는 자바로 개발하는 데 필요한 라이브러리들과 javac, javadoc 등의 개발 도구들이 포함되어 있고, 자바 프로그램을 실행시켜줘야 하기 때문에 JRE도 포함되어 있다. 즉 JDK는 JVM, JRE를 모두 포함하고 이외에도 자바로 개발하는 데 필요한 Development Tools를 포함하고 있다. 자바 버전 Java 11, Java 17과 같이 여러 버전이 있는데 이 버전은 JDK의 버전을 의미한다. 그래서 자바를 설치한다는 것은 JDK를 설치한다는 의미이다..

Language/Java 2023.12.18

[백준] 10816. 숫자 카드 2

https://www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,0 www.acmicpc.net 이분 탐색으로 그냥 해당 값이 있는지 찾기만 하면 되는 게 아니라 몇 개 있는지를 찾아야 한다. 따라서 상한선과 하한선을 찾아서 몇 개인지 개수를 계산하면 된다. 입력 값을 배열에 저장하고 배열을 정렬한다. 상한선과 하한선을 찾고, (상한선 - 하한선)이 해당 값의 개수가 된다. 예를 들어 [1, 1, 2, 2, 2, 3]과 같이 배열이 있을 때, 값 2의 상한..

CS/Algorism 2023.12.11

PDU, SDU

PDU PDU(Protocol Data Unit)는 동일 레이어 간에서 운반되는 데이터를 부르는 이름이다. OSI 7 계층에서 각 계층은 상위 계층으로부터 전달받은 데이터에 헤더 정보를 추가하는데, 이때 각 계층에서 부르는 데이터 단위의 이름이다. 4계층에서는 세그먼트, 3계층에서는 패킷, 2계층에서는 프레임이라고 부른다. 그리고 1계층에서는 2계층으로부터 전달받은 프레임을 비트로 다룬다. SDU SDU(Service Data Unit)는 상향/하향 레이어 간에 전달되는 정보를 말한다. 즉 PDU는 SDU와 헤더 정보인 PCI(Protocol Control Unit)로 이뤄진다. PDU = SDU + PCI Reference http://www.ktword.co.kr/test/view/view.php?m..

CS/Network 2023.12.09

[백준] 18808. 스티커

https://www.acmicpc.net/problem/18808 18808번: 스티커 붙이기 혜윤이는 최근에 다양한 대회를 참여하면서 노트북에 붙일 수 있는 스티커들을 많이 받았다. 스티커는 아래와 같이 사각 모눈종이 위에 인쇄되어 있으며, 스티커의 각 칸은 상하좌우로 모두 연 www.acmicpc.net 어려운 문제는 아니고 그냥 구현 문제이다. 그런데 스티커 회전이라든지, map에 붙일 수 있는지 없는지 이차원 배열의 범위를 탐색한다든지 짜잘하게 신경써야 할 것이 많다. 그리고 그만큼 실수하기 쉬운 문제이다. 다행히 몇 번 디버깅하면서 맞출 수 있었는데, 그래도 다음에 다시 풀면서 꼼꼼히 생각하자는 의미로 기록한다. import java.io.BufferedReader; import java.io..

CS/Algorism 2023.12.08

HashSet, LinkedHashSet, TreeSet

Set Set은 ADT로 다음과 같은 특징을 갖는다. 중복을 허용하지 않는다. 저장 순서를 유지하지 않는다. HashSet 자바에서는 Set 자료구조의 구현체로 HashSet을 제공한다. HashSet은 다음과 같이 Set 인터페이스를 구현하고 내부적으로 HashMap을 사용한다. public class HashSet extends AbstractSet implements Set, Cloneable, java.io.Serializable { private transient HashMap map; private static final Object PRESENT = new Object(); public HashSet() { map = new HashMap(); } } HashSet이 중복된 데이터를 허용하지..

CS/Data Structure 2023.12.07