728x90
반응형

분류 전체보기

728x90
반응형
프로그래밍/C & C++

[C++] 함수 포인터를 이용해 Switch ~ case문 대체

데이터를 처리할 때 보통 Switch case문을 사용한다. 하지만 데이터의 종류가 많아지게 되면 case가 수백 개가 넘어가는 경우가 생긴다. 이 경우 함수 포인터를 통해 Swich문을 제거해 줄 수 있다. Switch문을 이용해 Packet을 처리하는 방식은 case가 많아질수록 성능이 저하될 수 있음. 관리도 어려워지고 가독성도 떨어짐. Switch문을 함수 포인터로 관리할 수 있도록 함. 예를 들어, 아래와 같이 Swich case문을 함수 포인터 형태로 바꿔보자. void Model::ProcessMessage(const int idx, const char* data) { switch(idx) { case 0: ProcessA(data); break; case 1: ProcessB(data); ..

Embedded system/[KOCW] 운영체제

[운영체제] 프로세스 동기화 2 (Critical Section, Race condition)

Race condition : 여러 프로세스들이 동시에 공유 데이터를 접근하는 상황 공유 데이터와 동시 접근은 데이터의 불일치 문제를 발생시킬 수 있다. 데이터의 최종 연산 결과는 마지막에 데이터를 다룬 프로세스에 따라 달라지는데, 일관성 유지를 위해서는 협력 프로세스 간의 실행 순서를 정해주는 메커니즘이 필요하다.​ Race condition을 막기 위해서 concurrent process는 동기화되어야 한다. ​사용자 프로세스 P1 수행 중 timer interrupt가 발생해서 context switch가 일어나서 Process2가 CPU를 잡으면..? ● ​Critical Section (임계 영역) 공유 데이터인 X에 Process 1도 접근하려 하고 있고 Process 2도 접근하려고 하는 상..

Embedded system/[KOCW] 운영체제

[운영체제] 프로세스 동기화 1 (Race Condition/경쟁 상태)

● 데이터의 접근 데이터는 Storage Box에 저장되어 있고 그 데이터를 가지고 Execution Box 위치에서 연산 작업을 한 후 다시 원래 위치인 Storage Box에 저장한다. 이렇게 데이터를 읽고 연산/수정 후 결과를 다시 저장하는 과정에서 누가 먼저 읽어갔느냐에 따라 결과가 달라질 수 있다. ● Race Condition Storage Box를 공유하는 Execution Box가 여러 개 있을 경우 Race Condition의 가능성이 있다. Storage Box는 Memory Address Spage라고 하고 Execution Box는 CPU Process라고 생각해 보자. Race Condition가 발생하게 되면 운영체제 커널과 관련된 문제가 제일 크다. 프로세스가 운영체제에게 Sy..

Embedded system/[KOCW] 운영체제

[운영체제] CPU 스케줄링3 (Multiple-Processor, Real-Tme, Thread, Algorithm 평가)

이전 발행글 2022.12.26 - [Operating System] - [운영체제] CPU 스케줄링 1 (CPU burst Time, Scheduler & Dispatcher) [운영체제] CPU 스케줄링 1 (CPU burst Time, Scheduler & Dispatcher) ● CPU and I/O burst in program Excution 프로그램 실행이 되면 프로그램은 아래와 같은 Path를 실행한다. 프로세스는 CPU에서 기계어가 실행되는 상태와 I/O 작업을 하는 상태의 반복이다. 프로그램마다 다 rannnneey.tistory.com 2022.12.26 - [Operating System] - [운영체제] CPU 스케줄링 2 (FCFS, SJF, SRTF, Round Robin, M..

Embedded system/[KOCW] 운영체제

[운영체제] CPU 스케줄링 2 (FCFS, SJF, SRTF, Round Robin, Multilevel Queue, Multilevel Feedback )

● Scheduling Algorithms 종류 FCFS (First-Come First-Served) SJF (Shortest-Job-First), SRTF (Shortest-Remaining-Time-First) Priority Scheduling RR (Round Robin, 라운드 로빈) Multilevel Queue Multilevel Feedback Queue 스케줄링 알고리즘은 크게 두 가지로 나눌 수 있다. nonpreemptive(비선점형)한 스케줄링과 preemptive(선점형)한 스케줄링이다. 선점형은 CPU 제어권을 한 번 줬으면 그 프로그램이 다 쓰고 나갈 때까지 CPU 제어권을 강제로 다시 빼앗지 않는다. 비선점형 스케줄링은 Timer Interrupt와 같이 CPU 제어권을 강..

Embedded system/[KOCW] 운영체제

[운영체제] CPU 스케줄링 1 (CPU burst Time, Scheduler & Dispatcher)

● CPU and I/O burst in program Excution 프로그램 실행이 되면 프로그램은 아래와 같은 Path를 실행한다. 프로세스는 CPU에서 기계어가 실행되는 상태와 I/O 작업을 하는 상태의 반복이다. 프로그램마다 다르겠지만 CPU만 쭉 쓰는 프로그램도 있을 거고, 중간에 I/O가 많이 들어오는 프로그램도 있다. 어쨌든 프로그램의 path는 CPU를 쓰는 단계와 I/O를 쓰는 단계가 번갈아가면서 실행한다. CPU Burst : CPU만 연속적으로 쓰면스 Instruction을 실행하는 단계 I/O Burst : I/O를 실행하고 있는 단계​ ​ ● CPU burst Time 아래 그림은 컴퓨터 안에서 돌아가는 프로그램들의 CPU burst Time을 그래프로 찍어본 것이다. 주로 사람..

Embedded system/[KOCW] 운영체제

[운영체제] 프로세스 시스템 콜(fork, exec, wait, exit), IPC(Inter Process Commuication)

● 프로세스 생성, 실행, 종료 프로세스는 복제 생성을 하며, 부모 프로세스가 자식 프로세스를 생성해야 하는 구조로 프로세스의 계층은 트리 형태이다. 프로세스가 만들어지면 그 프로세스만의 독자적인 주소 공간(Code, Data, Stack)이 생긴다. fork() 함수를 통해 부모 프로세스를 복사하면 이 주소 공간을 Binary 통째로 복사한다. Program Counter까지 모두 복사되니까 당연히 자식 프로세스는 부모 프로세스가 실행한 부분 (fork() 함수의 다음 줄)부터 실행하게 된다. 이렇게 되면 시스템의 프로세스는 모두 똑같이 동작하게 된다. 그래서 exec()라는 System Call을 통해 프로그램을 덮어 씌워야 한다. 프로세스가 자발적으로 종료될 때에는 exit() System Call..

Embedded system/[KOCW] 운영체제

[운영체제] Thread (스레드)

● Thread (스레드) 프로세스 내부에 CPU 수행 단위가 여러 개 있는 경우에 Thread라고 말한다. 프로세스가 생기면 각각의 프로세스마다 메모리에 주소 공간(Code, Data, Stack)이 만들어지며, 프로세스 하나를 관리하기 위해서 Kernel data 영역에 PCB를 두고 있다. 위 그림과 같이 PCB에는 프로세스 상태, 프로세스 ID, 메모리의 어떤 부분을 실행하고 있는가를 가리키는 Program Counter... 등이 있다. 그렇다면 스레드(Thread)를 사용하는 이유는 뭘까? 프로세스를 만들 때마다 각 프로세스만의 주소 공간이 만들어진다고 했다. 만약 어떤 동일한 일을 하는 프로세스가 여러 개 있다고 가정하면, 각각의 프로세스마다 별도의 주소가 만들어져 메모리가 낭비된다. 같은 ..

728x90
반응형
라닝
'분류 전체보기' 카테고리의 글 목록 (8 Page)