전체 글 199

리스트(list)

리스트란 순서를 가진 데이터의 집합을 가리키는 추상자료형이다.(abstract data type) 동일한 데이터를 가지고 있어도 상관 없고, 순서 또는 위치를 가진다. 구현 방법에 따라 크게 두 가지로 나뉜다. 1) 순차 리스트: 배열을 기반으로 구현된 리스트 1차원 배열에 항목들을 순서대로 저장한다. 데이터의 종류와 구조에 따라 구조화된 자료구조를 만들어 배열로 만들 수도 있다. 데이터 접근은 배열의 인덱스를 이용해 원하는 위치의 데이터에 접근할 수 있다. 단순 배열을 이요해 순차리스트를 구현하는 경우, 자료의 삽입/삭제 연산 과정에서 연속적인 메모리 배열을 위해 원소들을 하나씩 미는 작업이 필요하다. 따라서 원소의 개수가 많고 삽입/삭제 연산이 빈번하게 일어날수록 작업에 소요되는 시간이 크게 증가한다..

CS/data structure 2021.02.12

CPU Scheduling: CPU 스케줄링 (1/2)

CPU는 프로그램의 기계어 명령을 실제로 수행하는 중앙처리장치이다. 프로그램이 시작되어 메모리에 올라가면 pc(레지스터의 일종)가 cpu가 실행해야 할 명령의 메모리 주소값을 가리키고 있다. cpu는 컴퓨터 내부에 하나밖에 없기 때문에 매우 효율적으로 사용하여야 하는 하드웨어 자원이다. - 일반명령 1. cpu 내부에서 수행되는 명령 ex) add 연산 (레지스터에 있는 두 값을 더해 레지스터에 저장하는 명령. cpu 내에서만 수행되므로 정말 빠르다) 2. 메모리 접근을 필요로 하는 명령 ex) load, store (load : 메모리 데이터 -> cpu / store : 계산된 결과값 -> 메모리 둘 다 cpu 내에서만 수행된느 것보단 느리지만 비교적 짧은 시간이 걸림) - 특권 명령 1. 입출력을 ..

CS/operating system 2021.02.12

큐 (Queue)

큐는 선형 자료구조로 먼저 들어온 데이터가 먼저 나가는 선입선출(FIFO: First In First Out)의 구조를 가지고 있다. 큐는 뒤에서 새로운 원소가 추가되고 앞에서 새로운 데이터가 하나씩 삭제되는 구조를 가지고 있다. 구조상으로 큐가 스택과 다른 점은 스택의 경우, 삽입과 삭제가 같은 쪽에서 일어나지만 큐에서는 삽입과 삭제가 다른 쪽에서 일어난다는 것이다. 큐의 연산 큐의 삽입 연산은 enqueue연산이라고 불리우며, 큐에 요소를 추가하는 연산으로서 큐의 맨 뒤에 원소를 추가한다. 이때 큐의 제일 뒤를 가리키는 용어를 rear이라고 한다. 큐의 삭제 연산은 dequeue연산이라고 불리우며, 큐에 요소를 삭제하는 연산으로서 큐의 제일 앞의 원소를 삭제한다. 이때 큐의 제일 앞을 가리키는 용어를..

CS/data structure 2021.02.11

스택(Stack)

스택이란 물건을 쌓아 올리듯 자료를 쌓아올린 형태의 자료구조이다. 선형 자료구조(자료 간의 관계가 1대 1인 관계)를 가지며 후입선출(LIFO: Last In First Out) 의 특성을 가진다. 즉 제일 나중에 들어온 데이터가 제일 먼저 나가게 된다. 스택에서 입출력이 이루어지는 부분을 스택 상단(top)이라고 하고 아랫 부분을 스택 하단(bottom)이라고 한다. 자료가 하나도 들어있지 않은 스택을 공백 스택(empty stack)이라고 하며, 스택에 저장되는 데이터를 요소(element)라고 부른다. 스택은 자료의 출력 순서가 입력 순서의 역순으로 이루어져야 할 경우 매우 요긴하다. 시스템 스택을 이용한 함수 호출 함수는 실행이 끝나면 자신을 호출한 함수로 돌아가야 한다. 이 때, 스택은 복귀할 ..

CS/data structure 2021.02.11

Process Management: 프로세스 관리 (3/3)

7. 프로세스의 생성(Process Creation) 프로세스 생성은 어려운 거라서 시스템이 부팅되고 난 최초의 프로세스는 운영체제가 생성하지만 그 이후 존재하는 프로세스가 다른 프로세스를 복재 생성하게 된다. 부모 프로세스(parent process)가 자식 프로세스(child process)를 생성한다. 이러한 방식을 통해 프로세스는 족보와 같은 계층을 생성하게 된다. 현실 세계에서는 부모가 먼저 죽고 자식이 죽지만 프로세스 세계에서는 자식이 먼저 죽고 부모가 죽는다. 왜냐하면 부모 프로세스는 자식 프로세스의 죽음에 대한 처리를 담당해야 하기 때문이다. 불효가 아닐 수 없다. 프로세스는 자원을 필요로 하는데 어떻게 자원을 공급받을까? 그 방법은 1. 운영체제로부터 공급받는다. 2. 부모와 공유하여 사..

CS/operating system 2021.02.10

Process Management: 프로세스 관리 (2/3)

5. 프로세스를 스케줄링하기 위한 큐 큐는 각 프로세스의 PCB를 연결리스트 형태로 관리하며 포인터를 사용해 순서를 정한다. 준비 큐(ready queue) 현재 메모리 내에 있으면서 cpu를 잡아서 실행되기를 기다리는 프로세스의 집합, waiting 상태이므로 메모리에 올라가있음 장치 큐(device queue) I/O device의 처리를 기다리는 프로세스의 집합, blocked 상태 작업 큐(job queue) 현재 시스템 내에 있는 모든 프로세스의 집합, 작업 큐에 속한다고 메모리를 가진 것은 아님 운영체제는 준비 상태에 있는 프로세스들을 줄세우고 cpu를 나눠주기 위해서 준비 큐를 둔다. 그리고 큐의 선입선출 특성을 이용하여 제일 앞에 서 있는 프로세스에게 cpu를 할당한다. 이때 준비 큐에 프..

CS/operating system 2021.02.10

Process Management: 프로세스 관리 (1/3)

1. 프로세스의 개념 Process is a program is execution. 실행 중인 프로그램이 프로세스이다. 디스크에 존재하던 실행 파일이 메모리에 적재되고 프로그램이 CPU를 할당 받아 명령(instruction)을 실행하기 시작하면 비로소 생명력을 갖는 프로세스가 된다. 잡(job)이라는 용어와 프로세스를 혼용해 사용하기도 한다. 프로세스를 이해하기 위해서는 프로세스 문맥(process context)에 대해 알 필요가 있다. 프로세스 문맥이란 프로세스가 현재 어떤상태에서 수행되고 있는지 정확히 규명하기 위해 필요한 정보를 의미한다. 프로세스가 시작해서 종료할 때까지 cpu에서 명령을 한꺼번에 수행하는 것이 아니라, 여러 프로세스가 cpu를 나눠쓰는 시분할 시스템 환경에서는 타이머 인터럽트..

CS/operating system 2021.02.09

SWEA 암호문 1: 자바

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14w-rKAHACFAYD&categoryId=AV14w-rKAHACFAYD&categoryType=CODE&problemTitle=%EC%95%94%ED%98%B8%EB%AC%B8&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 그냥 LinkedList 연습 문제다 import java.util.LinkedList; import java.uti..

SWEA 9229 한빈이의 spot mart (Java 자바)

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AW8Wj7cqbY0DFAXN&categoryId=AW8Wj7cqbY0DFAXN&categoryType=CODE&problemTitle=%ED%95%9C%EB%B9%88%EC%9D%B4&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 역시 조합으로 풀면 된다. 아주 쉬운 문젠데... " "를 " "로 스페이스 두번 치는 바람에 두번 틀렸다. 꼼꼼하게..

백준7568 덩치: 자바

천천히 생각해보면 엄청 쉬운 문제 제발 문제 접근을 좀 쉽게 생각하자!!! import java.util.Scanner; public class bj7568 { static int person[][], ranking[]; static int N, cnt, rank; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); person = new int[N][2]; ranking = new int[N]; for (int i = 0; i < N; i++) { person[i][0] = sc.nextInt(); person[i][1] = sc.nextInt(); } for (int i = 0; i..

카테고리 없음 2021.02.08