목록전체 글 (280)
내 잡다한 노트
스레드 CPU가 작업을 할 때 프로세스가 CPU 스케쥴러에 선택받고 스케쥴러는 CPU에게 전달하는 일의 단위를 스레드라 한다. CPU는 스레드의 단위로 일을 한다. CPU에서 처리하는 작업의 단위. 프로세스와 스레드 프로세스는 운영체제에서의 작업의 단위이고 스레드는 CPU에서의 작업의 단위이다. 프로세스끼리는 약하게 연결되어 있어 서로 영향을 크게 받지 않지만 스레드는 강하게 연결되어 있어 영향을 크게 받는다. 멀티스레드 프로세스 내 작업을 여러 개의 스레드로 분할함으로써 작업의 부담을 줄이는 기법. 멀티태스킹 운영체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법. 이런 시스템을 시분할 시스템이라 한다. 멀티 프로세싱 CPU를 여러개 사용하여 여러 개의 스레드를 동시에 처리하는 작업 환경...
프로세스의 구조 코드 영역, 데이터 영역, 스택 영역이 있다. 힙 영역이란것도 있다. 코드영역과 데이터 영역은 정적인 영역이고, 스택 영역과 힙 영역은 동적인 영역이다. 코드 영역은 읽기 밖에 안되고 수정할 수 없다. 데이터 영역은 읽고 쓰기가 가능하다. 스택 영역은 a함수가 b함수를 호출할 때 b함수가 끝나면 a 함수로 다시 돌아가야 하는데 그때 a의 메모리 주소 정보와 b 함수로 보내는 파라미터들을 보관하는 영역이라고 한다. fork() 프로세스가 자식 프로세스를 만드는 것이다. 어떻게 만드냐면 그대로 복사를 한다. 하지만 바뀌는 정보도 있다. 프로세스 구분자와 메모리 관련 정보, 부모 프로세스 구분자와 자식 프로세스 구분자가 그렇다. 부모와 자식 관계로 만들면 부모 프로세스가 자식 프로세스의 자원을..
프로세스 제어 블록(PCB) 이 블록에는 프로세스들의 정보가 담겨있다. 첫 번째 블록에는 포인터가 담겨있다. 이걸 통해 준비큐에서 빠르게 찾을 수 있다. 또한 PID 프로세스 구분자와 프로세스 우선순위, 프로세스 상태, 메모리 관리 정보, 여러 레지스터들의 정보, 프로그램 카운터, 부모, 자식 PID 등등이 존재한다. 프로세스 구분자는 프로세스를 구분하기 위한 번호이다. 프로세스 우선순위는 CPU 스케쥴링이 우선순위대로 선택하도록 하기 위한 것. 메모리 관리 정보는 프로세스가 메모리 어디에 있는지 나타내는 메모리 정보와 한계 레지스터와 경계레지스터 값도 들어간다. 문맥교환 프로세스들이 서로 상태가 바뀔 때 그 새로운 환경을 만드는 과정 실행상태의 프로세스가 완료 상태로 가야하고, 그 자리에 준비 상태의 ..
프로세스와 프로그램의 차이점 프로그램은 PCB(프로세스 제어 블록)을 받지 않은 상태이고 메모리에 올라가지 않은 것을 뜻한다. 프로세스는 PCB를 받아 메모리에 올라간 상태를 말한다. 프로그램은 정적이고, 프로세스는 동적인 것이다. 프로세스의 다섯가지 상태 생성 -> 준비 -> 실행 -> 완료 -> 대기 생성은 프로그램을 메모리에 올려 PCB를 준 상태이다. 그렇게 되면 준비상태로 가게 된다. 준비 상태에서는 준비 큐가 있어 CPU 스케쥴링의 선택을 기다리며 준비한다. 각각의 프로세스들은 우선순위가 존재해 그 우선순위에 따라 CPU 스케쥴링은 선택을 하게 된다. 선택을 받으면 CPU가 프로세스를 실행시키게 된다. 이때 프로세스들은 타임 슬라이스를 받고 주어진 시간동안 실행을 하지 못하면 다시 준비상태로 ..
구현, 시뮬레이션 문제이다. board에는 deque를 기본값으로 둬서 상어가 해당 자리에 들어갈 수 있게 했다. 상어가 움직이는 것은 사이클을 구하려 했는데 못구해서 맨 끝으로 갈 수 있는지를 확인하고 갈 수 있다면 방향을 바꿔주고 맨끝으로 한번에 이동하는 과정을 반복하도록 했다. 처음엔 2번 틀렸었는데 그 이유가 상어가 다른 상어를 잡아먹을때 shark 리스트에서 제거도 했어야했는데 remove를 안해서 좀비 상어가 발생했었다...ㅎ # 소스코드 from collections import deque r, c, numShark = map(int, input().split()) shark = [] fishing_board = [[deque() for _ in range(c)] for _ in range(..
# 문제 https://www.acmicpc.net/problem/1717 1717번: 집합의 표현 첫째 줄에 n(1 ≤ n ≤ 1,000,000), m(1 ≤ m ≤ 100,000)이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주어진다. 합집합은 0 a b의 형태로 입력이 주어진다. 이는 www.acmicpc.net 유니온-파인드 알고리즘을 사용하는 기본 문제이다. 기본 문제라 굉장히 쉽다. 노드 수가 최대 100만개라 좀 걱정이 됐는데 유니온 파인드 알고리즘의 시간복잡도는 높이와 관련이 있어서 그런지 해결이 됐다. 유니온은 합치는 것. 즉 노드들을 연결시키는 것 파인드는 루트 노드를 찾아 루트 노드가 같은지 확인을 해 두 노드가 같은 노드 집합에 속해있는지 ..
# 정의 해시테이블은 해시함수를 이용하여 키를 해시값으로 매핑하고 이 해시값을 인덱스삼아 데이터를 key와 함께 저장하는 자료구조이다. # 해시함수 해시 함수의 정의는 key를 고정된 길이의 hash로 변경해주는 역할을 한다. 이 과정을 해싱이라고 한다. key ---(해시함수)---> 해시 해시는 저장위치 즉 인덱스가 된다. # 해시테이블 구성 key : 해쉬 함수의 input이고, key를 그대로 인덱스로 사용할 경우에는 key의 길이만큼의 정보를 저장해야하는 공간도 따로 마련해야 해서 고정된 길이의 해시로 변경하는 것이다. 해시 함수 : key를 고정된 길이의 해시로 변경해주는 역할을 한다. 서로 다른 key가 해싱후 같은 해시 값이 나오는 경우가 있다. 이를 해시충돌이라고 한다. 이 충돌이 안나올..
운영체제에서 명령어를 처리할 때 하나씩만 하면 효율이 떨어지므로 여러개를 동시에 처리함으로써 빠르게 데이터를 처리할 수 있는 방식. 여러개의 명령을 동시에 처리하는 병렬 처리는 코어가 여러개인 cpu는 물론이고 코어가 하나인 CPU에서도 가능하다. 한 주방에서 여러 개의 볶음밥을 동시에 조리하는 것을 CPU의 사양에 비유하면 하나의 코어에 여러 개의 스레드를 이용하는 방식과 같다. 이러한 방식을 파이프라인 기법이라고 부른다. 스레드는 CPU가 처리할 수 있는 작업의 단위이다. 여러 개의 스레드를 동시에 처리하는 방법을 멀티스레드라고 한다. 병렬처리 시 주의 사항 A작업에 B를 먼저 해야한다면 B가 끝날때까지 A는 할 수 없기 때문. 상호 의존성이 없어야 병렬처리가 가능하다. 시간을 거의 일정하게 맞추어야..