본문 바로가기

분류 전체보기

(273)
공유메모리(Shared Memory)를 통한 접근과 스레드(Thread)를 사용한 접근의 차이 사실은 스레드의 접근은 이 내용을 읽다 보면 그래서 스레드 쓰는구나 할 수도 있어서 과감하게 제외했습니다.사실 공유 메모리를 사용해 프로세스가 접근하는 것과 스레드가 공유 자원에 접근하는 것은 맥락은 비슷하다고 느껴진다. 그래서 이 둘의 차이가 분명히 존재하지 않을까? 해서 찾아본 내용입니다. 공유 메모리(Shared Memory)는 가장 빠른 IPC 매커니즘으로 평가를 받습니다. 왜냐하면, 공유메모리는 데이터를 프로세스들 간에 전달할 때 운영체제 커널을 통한 데이터 복사하지 않고 사용자 공간에서 바로 데이터를 읽고 쓰게 설계되었기 때문입니다. 다른 프로세스끼리 통신을 하기 위해선 무조건 Kernel 메모리 공간에 데이터를 보내고 다른 프로세스가 Kernel 메모리 공간에 접근해 데이터를 읽어와야 하는 ..
프로세스간 통신 IPC(Inter Process Communication) 협력 프로세스는 다른 프로세스와 데이터를 공유하거나 어떤 방식으로든 서로 영향을 주고받는 프로세스를 의미합니다. 이러한 프로세스들은 시스템 내에서 서로 정보를 교환하거나 동기화를 수행해 작업을 수행합니다. 이렇게 협력 프로세스는 프로세스 간 통신(Inter Process Communication) 메커니즘을 통해 서로 데이터를 주고받거나 상태 정보를 공유합니다. 이러한 방법은 총 7가지의 프로세스 통신이 존재합니다. 1. 파이프(Pipes) : 단방향 통신을 위한 기본적인 IPC 메커니즘입니다. 한 프로세스의 출력이 다른 프로세스의 입력으로 직접 연결됩니다. 파이프는 일반적으로 부모-자식 프로세스 간에 사용되며, 데이터 스트림을 전송하는 데 사용됩니다. 2. 이름 있는 파이프(Named Pipes) : ..
Running중이고, Kernel mode로 전환되면서 Waiting으로 상태가 변경된다면? 우리는 Running만 하고 바로 Ready Queue로 넘어가는 것은 Kernel Mode의 실행이 없을 때입니다. 단순히 현재 실행되는 상황을 잠시 접어두고 Ready Queue로 보내버리면 될 것입니다. 하지만, I/O가 이루어지는 데이터 이동 또는 Network를 통해서 옮겨지는 데이터 등이 있다면? 우리는 그 데이터를 받기까지 기다려야 할 것입니다. 어디서 대기를 하냐면 Waiting Queue에서 대기를 하게 됩니다. 이제 요청했던 데이터가 도착을 하게 되고 PCB에 상태가 저장될때까지는 우리는 Waiting의 상태가 되어야겠죠? 그렇다면 당연히 Memory에 프로세스의 메모리 영역이 할당되어 있을테고요? 그런데 만약 Ready Queue에서 새로운 프로세스를 메모리를 할당해줘야 하는데 메모리..
프로세스가 Ready Queue에서 선택되어서 Running 상태가 되었을때 위 과정이 어떻게 일어나게 되는지 얘기를 해보고자 합니다. Ready Queue에 저장되어있는 PCB(Process Control Block)들이 이제 단기 스케줄러(Short Term)에 의해서 선택이 됩니다. 이 단기 스케줄러는 어떤 기준을 갖고 선택을 하게 될까요? 선택 기준은 첫번째는 우선순위가 될 것입니다. 우선순위가 높은 프로세스가 먼저 선택이 될 것인데, 우선순위를 결정짓는 것은 window, Linux마다 다를 것입니다. 이건 찾아봐야겠네요. 그 다음은 스케줄링 정책에 따르게 됩니다. 여러 스케줄링이 존재하는데 아래와 같습니다. 총 두가지 형태가 있는데, 비선점 선점입니다. 비선점이라는 것은 다른 프로세스가 해당 프로세스가 동작이 완료할 때까지 뺏을 수가 없다는 뜻입니다. 제 생각에는 반대..
프로그램을 더블클릭하거나 명령어를 통해서 실행시켰을때 프로그램은 HDD, SSD에 저장되어 있는 정적인 객체를 의미하는데, 프로세스는 이와 반대로 동적인 객체이며 실행 중인 프로그램을 의미한다. 그렇다면, 프로그램이 프로세스가 되어서 CPU, Memory, I/O Device를 확보하는 과정은 어떻게 이루어지는지 순서대로 알아보도록 하겠습니다. 일단 우리는 프로그램의 더블클릭 또는 명령어를 통해서 실행시키려고 할 것인데, 이 행위 자체가 프로세스를 만드는 것을 의미하고요. 일단 프로그램이 프로세스가 되기 전에, Input Queue라는 저장소로 삽입이 됩니다. 어떤 정보를 갖고 들어가게 되냐면, 최소한의 데이터만 들고 Input Queue에 삽입이 됩니다. 최소한의 데이터라는 것은 프로세스 ID, 초기 상태, 메모리 정보, 스케줄링 정보 등이 실리게 되고요..
Index.. Index.. Index.. 정말 많이 들어봤습니다. 인덱스(Index). 하지만 실제 프로젝트에서 인덱스를 만들어본 적은 없습니다. 물론 PK를 설정하면 자동으로 인덱스가 들어가는 경우를 제외하고요. 실제로 인덱스를 이용해 데이터를 조회할 만큼 데이터가 많이 존재하지 않은 부분만 개발을 했었기 때문입니다. 그렇다고 중요한 사실을 모르고 지나가면 안될 것 같아서 공부 겸 내가 아는 지식이 맞는지 확일할 겸 인덱스(Index)에 관해서 작성해보도록 하겠습니다.올바르지 못한 내용이 존재할 수 있습니다. 틀린 점이 보인다면 댓글로 작성 부탁드리겠습니다."인덱스(Index)란 무엇일까?"인덱스(index)라는 것은 특정 컬럼(Column)의 값을 빠르게 검색할 수 있도록 도와주는 자료구조입니다. 즉, 책의 목차처럼 데이터가 저장된 위치를 ..
[기출문제] 고대 문명 유적 탐사 for(int i = 0; i 이 문제는 캐시를 활용해서 좀 더 쉽게 구현이 가능할 것 같은데, 캐시보다 내가 직접 구현하는게 마음이 편해서 그냥 구현했다. 물론 캐시를 이용하면 코드의 양이 줄고 실수가 줄을 텐데... 사실은 캐시를 제출하고 생각하게 됐다. 캐시를 하게 되면 다시 rotate를 하지 않아도 될텐데!그리고 이 문제는 어느 특정 위치에서 rotate를 할때 발생하는 착오가 굉장히 많이 생겨난다. 오늘은 그것을 정리해볼 것이다.특정 위치에서 시계방향 또는 반시계방향을 돌리는 것이 이 문제 해결의 주요 쟁점이 될 것이다.천천히 정리를 해보겠습니다.일단 기본적인 시계방향 전환입니다. 시작 위치는 (0,0)이고 배열의 범위는 n - 1 입니다.void cw() { int temp[MAX][MAX..
[기출문제] 마법의 숲 탐색 코드트리 기출문제에 있는 문제를 풀었다. 왜냐하면, 극한의 구현 문제이기 때문이다. 집중을 빡하고 풀어줘야지 실력도 상승하고 긴장감도 유지할 수 있기 때문이다. 그렇기에 해당 문제를 해결해보았다.문제 유형은 정말 4~5가지의 알고리즘 문제를 한문제에 합쳐둔것 처럼 어렵다. 하지만 차근차근 문제를 풀어나가다 보면 어느순간 해결이 되어있는데 그 짜릿함이 있다. 그래서 오랜만에 구현문제들로 풀어보았다. 요즘은 다른 유형이 생겨났던데 굉장히 어려워서 그거는 풀지 않았다.해당 문제는 범위를 늘려줘야하는 것에 키포인트가 있다고 생각한다. 골렘이 초반에 필요한 열은 3칸이다. 행은 뭐 신경쓸 필요는 없고, 그래서 열의 길이보다 +3칸 늘려줘서 거기서부터 시작하는 것이 좋다.그래야 생각도 편해진다. 대신 열의 길이를 ..