CS지식 썸네일형 리스트형 [운영체제] 병행성 /* 병행성 Concurrency*/동시에 실행하는 것 처럼 보여진다. (실제로는 짧은 시간 동안 작업들이 번갈아 가며 실행되는 것처럼 보인다.)병렬성 (Parallelism) 은 실제로 동시에 실행이 된다. 멀티코어에서 멀티 스레드를 동작시킨다.스레드 들은 동시에 메모리에 접근하게 되는데 이를 조정하지 않으면 문제가 될 수 있다. 주요 개념프로세스: 운영체제에서 실행되는 프로그램. 각 프로세스는 독립적인 메모리 공간을 가진다.스레드: 프로세스 내부에서 실행되는 작은 실행 단위. 한 프로세스 내에 여러 스레드가 존재할 수 있으며, 메모리를 공유한다. 스레드 생성시 스택을 생성한다. 즉, 스택은 공유하지 않는다.두 스레드가 하나의 프로세스에서 실행 중이라면 Context Switch를 통해 교체 된다. (.. 더보기 [운영체제] Paging 과 Multi-Level Paging /* Paging */페이징 (Paging)은 base and bound, segmentation과는 달리 address space (virtual memory)를 고정된 크기로 나눈다.한 단위를 page라고 한다. 첫번 째 그림처럼 총 64바이트 4개의 페이지가 있다고 가정하자. (1 페이지당 16바이트). 64바이트를 addressing하려면 6비트가 필요하다.페이지가 4개로 나뉘기 때문에 상위 2비트는 vpn (virtual page number)를 가리키고 나머지는 offset이다.physical address로 addressing 될때 offset은 그대로 가져오고 VPN -> PFN의 과정에서만 변환이 일어난다. paging을 사용하면 메모리를 고정된 크기로 나누어 할당하고 관.. 더보기 [운영체제] 메모리 가상화 - Segmentation /* 메모리 가상화 */메모리 가상화는 모든 프로세스들에게 별도의 가상 주소 공간을 제공해서 각각의 프로세스들은 자기가 전체 메모리를 다 사용하고 있는 것처럼 보이는 환상을 제공한다. 이를 통해 여러 프로그램이 동시에 실행될 때, 각각의 프로그램이 독립적인 메모리 공간을 갖는 것처럼 동작할 수 있다. 프로그램들은 가상 주소 (Virtual Address)를 사용하며, 운영체제와 하드웨어는 이를 물리 주소 (Physical Address)로 변환하여 실제 메모리로 접근한다. 주소 변환 (Address Translation)은 주로 CPU의 MMU (Memory Management Unit)에 의해 수행됩니다./* 세그멘테이션 Segmentation */세그멘테이션은 운영체제에서 메모리 관리를 위해 사용되는.. 더보기 [운영체제] Limited Direct Execution /* Limited Direct Execution */여러 프로그램을 동시에 작동하기 위해서는 CPU 가상화가 필요하다. 이는 Time Sharing 기법으로 구현할 수 있다. CPU 를 가상화를 구현하려면 Performance와 Control을 고려해야 한다. Performance: 오버헤드 없이 구현, Control: CPU에 대한 제어를 유지하면서 프로세스를 효율적으로 실행해야 한다. Limited Direct Execution 의 절차는 위와 같다.즉 컴퓨터가 부팅되면 CPU는 kernel mode 이므로 trap table을 만들어 예외나 인터럽트가 발생했을 때 하드웨어가 각각의 예외 별로 어떤 코드를 실행할지 그 위치를 알려주게 한다.User Mode에서 Program을 돌릴 때 I/O 작업.. 더보기 [운영체제] 가상화에 대한 간단한 정리 참고하는 책 : 운영체제 아주 쉬운 세 가지 이야기참고 : https://github.com/remzi-arpacidusseau/ostep-translations/tree/master/korean ostep-translations/korean at master · remzi-arpacidusseau/ostep-translationsVarious translations of OSTEP can be found here. Help the cause and contribute! - remzi-arpacidusseau/ostep-translationsgithub.com /* 운영체제의 중요성 */현재는 인턴으로 백엔드 개발자로 생활을 하고 있다. 상사분들과 커피챗을 하면서 백이면 백 내게 조언하는 점은 세 가지이.. 더보기 [CS] 다익스트라 알고리즘 /* 다익스트라 알고리즘 */다익스트라(dijkstra) 알고리즘은 그래프에서 한 노드에서 다른 노드까지의 최단 경로를 구하는 알고리즘 중 하나이다. 해당 과정에서 도착 노드뿐만아니라 모든 다른 노드까지의 최단 경로로 방문하며 각 노드까지의 최단 경로를 찾게 된다.매번 최단 경로의 노드를 선택해 탐색을 반복하는 것이다. /* 동작 원리 */시작 노드와 끝 노드를 설정한다.테이블을 초기화한다.노드의 인접 노드 (adjacent nodes) 중 방문하지 않은 노드를 구별하고, 그 중 가장 짧은 노드를 선택하고 방문처리 한다.해당 노드를 거쳐 다른 노드로 넘어가는 edge 를 계산해 테이블을 업데이트한다./* 예시 */ 출발 노드 1번, 도착 노드 6번 설정.테이블은 inf로 초기화edge도 표기함 출발 .. 더보기 Queue 와 Priority Queue /* Queue , Priority Queue */ Queue 는 FIFO 형식으로 먼저 넣은 데이터가 먼저 나오는 구조입니다. Priority Queue 는 넣은 데이터의 순서와 상관없이 우선순위가 높은 데이터가 먼저 나옵니다. /* Priority Queue의 구조 */ Heap 구조와 동일하다. 완전 이진트리 구조이다. 편의성을 위해 Array로 구현. (0번 인덱스는 사용 X) MaxHeap 과 MinHeap 이 있다. (root node의 값이 max, min 인지에 갈린다) /* Priority Queue - PUSH */ 190을 PUSH 하면 마지막 인덱스에 저장한다. 부모노드의 크기와 비교하여 노드 구조를 바꾼다. /* Priority Queue - POP */ root 노드의 값을 po.. 더보기 이전 1 다음