본문 바로가기

분류 전체보기

(225)
보안 방법 우리가 흔히 사용하는 운영체제는 여러 프로그램이 동시에 실행될 수 있는 다중 프로그래밍 환경에서 동작한다. 따라서 운영체제는 각 프로그램이 다른 프로그램의 메모리 영역이나 파일 영역을 침범하지 않도록 관리해야 한다. 이때 보안과 관련된 중요하고 위험한 명령들을 특권명령이라고 한다. 하드웨어 보안 운영체제는 하드웨어 보안을 위해 I/O 작업과 같이 디스크 파일에 접근하는 작업을 특권명령으로 삼아, 커널 모드에서만 실행할 수 있도록 한다. 따라서 사용자 프로그램이 맘대로 위험한 명령을 수행하는 것을 막는다. 메모리 보안 디스크뿐만 아니라 메모리의 경우에도 보안이 필요하다. 특히 메모리에 올라와 있는 OS의 코드(ex, 인터럽트 벡터와 인터럽트 처리 루틴)는 각별히 보안이 필요하다. 따라서 2개의 레지스터를 ..
컴퓨터 시스템의 구조와 저장 장치 컴퓨터 시스템의 구조 디바이스 컨트롤러와 로컬버퍼 디바이스 컨트롤러: 각각의 입출력 장치에는 컨트롤러가 있는데, 이는 해당 입출력 장치를 관리하는 일종의 작은 CPU이다(하드웨어). 로컬버퍼: 디바이스 컨트롤러는 들어오고 나가는 데이터를 임시로 저장하기 위한 작은 메모리 공간인 로컬 버퍼를 내장하고 있다. 로컬 버퍼는 주로 큐 형태로 구성되며, 선입선출 방식이다. 즉, 디바이스로부터 전송된 순서대로 데이터가 처리된다. DMA(Direct Memory Access) 원칙적으로 메모리는 CPU에 의해서만 접근할 수 있다. 따라서 CPU 외의 장치가 메모리의 데이터에 접근하기 위해서는 CPU에게 인터럽트를 발생시켜서 CPU가 컨트롤러의 로컬버퍼와 메모리 사이에서 데이터를 옮기는 일을 대신한다. 그러나 이 경우..
운영체제란? 운영체제란? 운영체제(Operating System)란 컴퓨터 하드웨어 바로 윗단에 설치되는 소프트웨어를 말한다. 좁은 의미의 운영체제: 컴퓨터 전원을 켜면 운영체제는 이와 동시에 실행된다. 소프트웨어가 컴퓨터 시스템에서 실행되기 위해서는 메모리에 그 프로그램이 올라가 있어야 한다. 운영체제도 하나의 소프트웨어이기 때문에 전원이 켜짐과 동시에 메모리에 올라간다. 하지만 운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라간다면 한정된 메모리 공간의 낭비가 심할 것이다. 따라서 운영체제 중 항상 필요한 부분만 전원이 켜짐과 동시에 메모리에 올려놓고, 그렇지 않은 부분은 필요할 때 메모리에 올려서 사용하게 된다. 이때 메모리에 항상 올라가 있는 부분을 커널(Kernel)이라고 부르며 이를 좁은 의미의 운영체..
가비지 컬렉션(Garbage Collection, GC) 가비지 컬렉션 가비지 컬렉션은 자바의 메모리 관리 방법 중 하나로, JVM의 Heap 영역에 동적으로 할당했던 메모리 중 더이상 사용되지 않는 메모리 객체를 모아 주기적으로 제거하는 프로세스를 말한다. C/C++ 언어의 경우 이런 가비지 컬렉션이 없기 때문에 개발자가 수동으로 메모리 관리를 해주어야 한다. 그러나 자바에서는 가비지 컬렉터가 대신 메모리 관리를 해주기 때문에 개발자는 메모리 관리나 메모리 누수(필요하지 않은 메모리를 계속 점유하고 있는 현상)에 신경쓰지 않아도 된다는 장점이 있다. [Stop The World, STW] 그러나 이러한 가비지 컬렉션에도 단점이 있다. 자동으로 처리해준다 해도 메모리가 언제 해제되는지 알 수 없어 제어하기 힘들며, 가비지 컬렉션이 동작하는 동안 다른 동작을 멈..
JVM 구조와 메모리 영역 JVM(Java Virtual Machine) JVM은 자바 바이트코드(.class)를 해석하고 실행한다. JVM의 역할은 자바 애플리케이션을 클래스 로더를 통해 읽어 들여서 자바 API와 함께 실행하는 것이다. JVM 덕분에 자바 코드는 OS에 종속적이지 않을 수 있다. 하나의 자바 프로그램의 바이트 코드만으로도 각 OS에 맞는 JVM이 해석하고 실행하기 때문에 OS에 상관없이 실행이 가능하다. JVM의 특징은 다음과 같다. 스택 기반의 가상 머신 심볼릭 레퍼런스: 기본 자료형을 제외한 모든 타입(클래스, 인터페이스)을 명시적인 메모리 주소 기반의 레퍼런스가 아니라 심볼릭 레퍼런스를 참조한다. 즉 참고하는 클래스의 특정 메모리 주소를 참조 값으로 갖지 않고, 이름만 갖고 있다. 가비지 컬렉션: 클래스 ..
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를 설치한다는 의미이다..
우아한테크코스 1차 합격 1차는 붙을 거 같았는데 붙었다. 프리코스 끝난 후로 최종 준비를 하나도 안해서 기대는 안하지만 토요일까지 나름대로 준비해야겠다!
[백준] 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의 상한..