요점(16)
-
File 객체를 만들 때 Path 객체를 이용하는 이유
private static final String APPLICATION_FILENAME = "config.txt"; ... trt { String classPath = getClassPath(); Path appPath = Paths.get(classPath, APPLICATION_FILENAME); File appFile = new File(appPath.toString()); if (appFile.isFile()) { System.out.println("It is a regular file."); List lines = Files.readAllLines(appPath, StandardCharsets.UTF_8); ... // 파일에서 줄로 읽어서 처리할 수 있다. } else { System.out...
2023.06.23 -
Chapter 14
연속 메모리 할당(memory contiguous allocation) 1. 연속 메모리 할당에서 연속의 의미 프로세스(실행 흐름)에 연속적인 메모리 공간을 할당하는 방식을 연속 메모리 할당 방식이라고 한다. 즉 실행 흐름의 크기만큼 메모리를 연속적으로 할당하는 방식이다. 스와핑(Swapping) 1. 스와핑이 효율적인 이유(프로세스의 5가지 상태를 포함해서 설명하기) 2. 스왑영역은 무엇의 일부? 3. 메모리에 적재된 모든 프로세스가 실행 상태인 것은 아니다. 메모리에 적재된 프로세스(실행 흐름)들 중에는 현재 실행 상태(running)가 아닌 프로세스가 있을 수 있다. 대표적으로 입출력 작업 때문에 대기 상태(waiting)가 된 프로세스가 있다. 이런 프로세스들을 임시로 보조기억장치의 일부 영역으로..
2023.06.14 -
Chapter 13
교착 상태(deadlock) ✅ 교착 상태란 무엇인가? 일어나지 않을 사건을 기다리며 진행이 멈춰 버리는 현상 교착 상태(deadlock)의 표현 : 자원 할당 그래프(resource-allocation graph) 1. 교착상태가 발생하는 근본적인 원인 4가지 2. 이 원인을 각각 제거해서 예방할 때 부작용이 발생하는가? 예방 우선 상호 배제(Mutual Exclusion)(한 실행 흐름이 다른 실행 흐름이 사용하는 임계 구역(공유 자원)을 사용할 수 없다.)를 없앤다면 동기화를 할 수 없다. 따라서 임계 구역에 접근할 위험이 발생한다. 그렇다면 점유와 대기(Hold and Wait)(한 실행 흐름이 자원을 점유한 채 다른 자원을 기다림)를 없앤다면? 이론상 운영체제는 특정 실행 흐름에 사용할 수 있는..
2023.06.09 -
chapter 12
동기화(Synchronization)1. 동기화가 없다면 발생하는 문제점? a) 자원 2. 동기화의 대상 3. 동기화로 이룰 수 있는 목적. 실행의 흐름이 올바른 순서대로 실행되고, 동시에 접근해서는 안 되는 자원에 오직 하나의 실행의 흐름만 접근하게 하는 것이 동기화이다. 실행의 흐름을 갖는 것(프로세스, 스레드)는 동기화의 대상이다.공유 자원(shared resource)1) 공유자원에 동시에 접근하면 어떻게 될까? 실행의 흐름이 작업을 할 때 이용하는 공동의 자원을 말한다. EX) 전역 변수임계 영역(critical section)1. 임계 영역의 정의 a) 프로그래머 입장 2. race condition이 왜 발생할까? a) 공유 자원 b) 컴파일러 공유 자원에 접근하는 코드 중 동시에 실행하면 ..
2023.06.03 -
chapter 11
CPU 스케쥴링(CPU scheduling) 1) CPU 스케쥴링이 필요한 근본적인 이유 운영체제가 합리적으로 CPU 자원을 배분하는 것을 말한다. 하나의 CPU는 하나의 프로세스밖에 실행할 수 없다. 프로세스는 CPU 자원이 필요하다. CPU 자원은 한정되어있고 프로세스의 수는 많다. 따라서 CPU 자원을 효율적으로 배분해야 한다. 이는 컴퓨터의 성능과도 직결된다. 프로세스 우선순위 1) 프로세스마다 우선순위가 달라지는 이유는 무엇인가 ? 2) 프로세스의 우선순위 정보는 어디에 명시될까? (프로세스의 정보를 어디에 기록하지?) 일반적인 프로세스는 CPU와 입출력장치를 모두 사용하며 실행된다. 즉 프로세스는 실행상태(running)와 대기상태(waiting)를 반복하게 된다. 프로세스마다 입출력장치를 이..
2023.05.26 -
LinkedList poll() vs removefirst()
LinkedList에서 poll()과 removeFirst()은 모두 리스트의 첫 번째 요소를 제거하고 반환하는 기능을 수행한다. - poll(): LinkedList에서 첫 번째 요소를 제거하고 반환한다. 만약 LinkedList가 비어있을 경우에는 null을 반환한다. LinkedList list = new LinkedList(); list.add("foo"); list.add("bar"); String firstElement = list.poll(); System.out.println(firstElement); // Prints "foo" - removeFirst(): LinkedList에서 첫 번째 요소를 제거하고 해당 요소를 반환한다. 만약 LinkedList가 비어있을 경우에는 NoSuchEl..
2023.05.24