전체 글

전체 글

    [운영체제 OS] 프로세스와 스레드, 그리고 병렬처리

    ※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 반드시 댓글로 알려주세요! 스레드란 프로세스의 '실행 흐름'을 의미한다. 한 프로세스는 여러 개의 스레드를 가질 수 있으며, 스레드들은 프로세스의 특정 메모리 영역을 공유한다는 특징이 있다. 본격적으로 스레드를 살펴보기 전에 프로세스에 대해 간략히 알아보자. [ 1 ] 프로세스란? 프로세스는 '메모리에 올라 실행 중인 프로그램'을 의미한다. 우리가 흔히 아는 프로그램은 executable 파일의 형태로 보조 저장 장치에 저장되어 있으며, 사용자의 클릭이나 명령어를 통해 실제로 실행할 수 있다. 운영체제는 실행 중인 프로그램들을 원활하게 CPU 스케줄링 하기 위해, 실행 중인 프로그램들이 메모리에서 소유하고 있는 자원을 보호(protectio..

    LG CNS 인턴, 현대 소프티어 부트캠프 코딩테스트 후기

    5/28 에는 LG CNS 인턴 코딩테스트에, 5/30 에는 현대자동차그룹 소프티어 부트캠프 코딩테스트에 응시했다. 결론부터 이야기하자면, 굉장히 힘든.. 시험이었다. 평소에 종종 백준 문제를 풀어오긴 했지만, 제대로 준비한 기간은 7-8일에 불과했고 그 기간동안에도 알고리즘을 복습하고 기본 문제를 풀이하는 것에 그쳤기에.. 아직 테스트에 통과할 실력은 절~대 아닌 듯 하다 😢 LG CNS는 3문제 중 2솔(희망)인 듯 하고, 소프티어 부트캠프는 6문제 중 겨우 2문제밖에 풀지 못했다. 내 모자란 실력에 내 자신도 경악을 금치 못했다. 두 코딩테스트를 치르며 가장 크게 느낀 점은 '이 문제를 어떤 알고리즘으로 풀어야하지?'라는 접근법이 아니라, '이 문제를 어떻게 해결하지?'라는 근본적인 접근법이 더 중..

    [운영체제 OS] Monolithic kernel, Micro kernel

    ※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 반드시 댓글로 알려주세요! [ 1 ] kernel 만약 사용자가 실행하고 있는 응용 프로그램이 CPU, 메모리 등에 직접 접근하고 조작할 수 있다면 하드웨어 자원이 무질서하게 관리될 것이다. 이에 OS는 CPU의 실행 모드를 User mode와 Kernel mode로 나누어 사용자가 실행하는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하며 자원을 보호하는 역할을 한다. 이때 kernel이 하드웨어와 소프트웨어 간의 인터페이스 역할을 담당하며 Device Driver, File System, I/O execution, error detection 등의 주요 기능을 수행한다. User area에서 kernel area의 권한이 필요..

    [알고리즘/Java] 유니온 파인드(Union-Find)

    ※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 반드시 댓글로 알려주세요! [ 1 ] 유니온 파인드(Union-Find)란? 유니온 파인드는 그래프에서 두 정점이 같은 집합에 속해 있는지 판별하는 알고리즘이다. 서로 연결되어 있지 않은 정점들도 판별할 수 있기에 서로소 집합(Disjoint-set) 이라고도 한다. 알고리즘 이름에 나와있듯이 특정 2개의 정점을 연결해 1개의 집합으로 묶는 union 연산(합집합)과 두 정점이 같은 집합에 속해 있는지를 확인하는 find 연산으로 구성되어 있다. DFS로도 각 정점이 연결되어 있는지 확인할 수 있겠지만, 경로가 길거나 확인해야 할 테스트 케이스가 많다면 시간 제한이 걸릴 수 있으므로 긴 경로를 축소할 수 있는 유니온 파인드를 활용해보자. ①..

    [Java] 그래프 표현하기 - 인접 리스트

    ※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 반드시 댓글로 알려주세요! [ 1 ] 그래프 그래프란 연결되어 있는 원소간의 관계를 표현하는 자료구조이다. 그래프는 연결할 객체를 나타내는 정점(Vertex)과 정점들을 연결하는 간선(Edge)의 집합으로 구성된다. 그래프는 다음과 같이 정의할 수 있다. G = (V, E) [ 2 ] 인접 리스트로 그래프 표현하기 Java로 그래프를 표현하는 방법에는 대표적으로 세 가지가 있다. 첫 번째는 정수 배열 기반으로 에지 리스트를 나타낼 수 있고, 두 번째로는 2차원 배열을 기반으로 인접 행렬을 나타낼 수도 있다. 주로 사용되는 방법은 ArrayList를 이용해 인접 리스트로 그래프를 표현하는 방법이다. (1) 가중치가 없는 무방향 그래프 (단,..

    [운영체제 OS] 운영체제의 역사 - Mainframe, Spooling, Multiprogramming, Timesharing

    ※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 반드시 댓글로 알려주세요! [ 1 ] Mainframe 초창기 대형 컴퓨터인 Mainframe은 '사람'이 프로그램이 실행되어야 할 순서대로 펀치카드를 정리하여 제출하면, 그것이 메모리에 적재되어 작업을 순차적으로 처리했다. 일단 한번 시작한 작업은 중단될 수 없었고, 하나의 작업이 끝나야 다음 작업이 수행될 수 있었다. 또한, 펀치카드를 제출하면 결과를 받을 때까지 컴퓨터와 유저 간의 상호작용을 할 수 없었고, 작업을 일괄 처리(Batch)하는 방식이었다. 이는 매우 직관적이고 단순한 OS 개념이었으며 기계적인 I/O 장치와 CPU 사이의 현저한 속도 차로 인해 CPU가 빈번히 idle 상태로 전환되는 문제점이 있었다. 예를 들어, 컴퓨터..

    [운영체제 OS] system call 및 호출 루틴

    ※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 반드시 댓글로 알려주세요! [ 1 ] system call 만약 사용자가 실행하고 있는 응용 프로그램이 CPU, 메모리 등에 직접 접근하고 조작할 수 있다면 하드웨어 자원이 무질서하게 관리될 것이다. 이에 OS는 CPU의 실행 모드를 User mode와 Kernel mode로 나누어 사용자가 실행하는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하며 자원을 보호하는 역할을 한다. 그렇다면 user mode와 kernel mode는 무엇일까? User mode는 단지 응용 프로그램이 실행되는 모드이며 I/O 장치 제어 명령어 등의 Privilege 명령어 실행, 레지스터 접근 등이 불가하다. 이와 달리 kernel mode는 모든 ..

    [운영체제 OS] 운영체제란?

    ※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 반드시 댓글로 알려주세요! [ 1 ] 운영체제가 필요한 이유 약 75년간 급격한 하드웨어의 진보가 있었고, 이러한 하드웨어들을 어떻게 잘 사용할 것인지에 대한 고민이 있었다. 컴퓨터에서 실행되는 응용 프로그램들은 결국 하드웨어 자원들을 사용해야 하기 때문이다. ① 엔지니어, 개발자들은 다양하고 많은 종류의 하드웨어와 관련된 것들을 모두 고려하며 응용 프로그램을 개발할 수 있을까? → 개발할 순 있겠지만 굉장히 복잡하고 어려울 것이다. ② 많은 프로그램이 동시에 실행되는 컴퓨터 환경에서 하드웨어 자원의 공유 및 분배는 어떻게 처리할 것인가? → 이에 대한 policy 가 없다면 특정 프로그램이 악의적으로 하드웨어 자원을 독점하는 등의 문제가 ..