컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 프로그램은?
운영체제 (Operation System)
게스트 O/S들과 컴퓨터 하드웨어 사이의 가상화 층으로 다수의 O/S 들 사이에서 리소스 사용량을 스케줄링하는 기능을 수행하는 전용 VMM (Virtual Machine Manager)은 무엇인가?
하이퍼바이저 (Hypervisor)
운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳, 프로세스의 상태 정보를 저장하는 구조체
PCB (Process Control Block)
CPU가 이전의 프로세스 상태를 PCB에 보관하고, 또 다른 프로세스의 정보를 PCB에서 읽어 레지스터에 적재하는 과정을 뜻하는 것은?
문맥 교환 (Context Switching)
프로세스 스케줄러에 포함된 요소로 분배기라고 표현하기도 하며, Ready 큐에서 준비된 프로세스를 꺼내 CPU에 적재하는 역할을 수행하는 요소는?
단기 스케줄러 (Dispatcher)
CPU 스케줄링 기법 중 SJF 스케줄러에서 발생하는 실행 시간이 오래 걸리는 작업이 CPU를 사용할 기회가 급격하게 낮아지는 Starvation이 발생하는 문제를 해결하기 위해 만들어진 방식으로 aging 기법을 활용하여 우선순위를 높여주는 기법은?
HRN (Highest Response ratio Next)
멀티 프로세스 스케줄링 기법 중 스레드 집합 별로 프로세스 집합에서 스케줄링을 수행하는 것은?
갱 스케줄링 (Gang scheduling)
실시간 스케줄링 기법 중 하나로 시간당 CPU 사용률을 계산하여 프로세스가 정상적으로 완료 될 수 있는지를 확인하여 스케줄링 하는 방식이다. 수행 주기가 가장 짧은 프로세스에 가장 높은 우선 순위를 부여한다.
비율 단조 스케줄링 (RM scheduling)
우선 순위 역전 (Priority Inversion)을 해결하는 방안 중 자원을 이용하는 프로세스의 우선순위를 대기 중인 프로세스의 가장 높은 우선순위와 동급 또는 상위 우선순위로 상승시켜 빠르게 자원을 반납하게 하고 다시 원래 우선순위로 환원하게끔 하는 것은?
우선순위 상속 (Priority Inheritance Protocol)
임계 영역을 위한 3가지 조건은?
상호배제, 진행 조건 프로세스, 한계 대기
하나 또는 둘 이상의 프로세스가 더 이상 계속할 수 없는 어떤 특정 사건을 기다리고 있는 상태는?
교착상태 (Dead Lock)
Dead Lock의 발생 조건 4가지를 쓰시오
상호배제, 점유와 대기, 비선점, 환형 대기
초고속, 저전력 특성의 DRAM 및 NAND Flash 등 초고속 반도체 메모리를 이용한 대용량 그린 스토리지는?
SSD (Solid State Drive)
플래시 메모리의 블록 디바이스처럼 사용하기 위한 I/O 기술로 DoC (Disk on Chip) 지원을 위해 개발된 기술이나 플래시 메모리에 주로 사용된다.
MTD (Memory Technology Device)
고가격/고속의 스토리지와 저가격/저속의 스토리지를 계층적으로 배치하여 저장되는 정보의 가치 및 용도에 따라 자동적으로 데이터를 이동시키는 데이터 저장 기술은?
HSM (Hierarchical Storage Management)
플래시 메모리의 소거 연산이 소자 수명을 단축시키는 특성을 고려하여 메모리 상에 메타정보를 유지하는 방식을 채택한 파일 시스템으로 NAND 플래시 메모리 전용 파일 시스템은?
YAFFS (Yet another Flash File System)
분산 네트워크 환경에서 여러 컴퓨터에 저장된 데이터를 하나의 파일 시스템으로 묶을 수 있는 파일 시스템은?
분산 파일 시스템 (Distributed File System)
파일 시스템 마다 상이한 파일 시스템 제어함수를 통합하기 위해 User space와 Kernal space 사이에 가상의 계층을 두어 파일 시스템 접근을 추상화한 방법은?
가상 파일 시스템 (VFS, Virtual File System)
리눅스 시스템의 정보를 파일처럼 참조 가능한 램 파일 시스템으로 응용 프로그램과 쉘 유틸리티에 접근하여 시스템 정보 획득 및 제공하는 것은?
/proc
가장 메모리 시스템에서 프로그램과 데이터를 고정 크기로 나누어 가상 기억장치로 로드하여 사용하는 기법
페이징 (Paging)
실제로 존재하는 장치에 대한 파일만을 포함하는 동적 장치 디렉터리를 제공하는 디바이스 드라이버 접근 인터페이스는?
udev (a userspace implementation of devfs)
자원을 경쟁적으로 사용하는 다중 프로세스에서의 상호배제 및 동기화 기술로 운영체제(커널) 내의 값으로 프로세스를 동기화시켜 자원을 사용한다. 정수 값을 변수로서 초기화 및 두 개의 연산 (P, V)으로만 접근 가능한 특수 변수를 이용하여 상호 배제를 구현한 것은?
세마포어 (Semaphore)
프로세스 간 1:1 통신을 지원하는 IPC 방식의 비효율을 개선하여 다수의 프로세스가 자원(소켓, 파일, 채널 등)을 공유하는 입출력 동기화 기법은?
멀티플렉싱 (Multiplexing)
커널이 모든 기능을 포함하고 있는 커널 아키텍처과 핵심적인 기능만을 포함하고 적용 분야나 적용 시스템에 따라 필요한 기능을 추가하는 방식의 커널 아키텍처를 각각 쓰시오
모놀리식 커널 (Monolithic Kernel), 마이크로 커널 (Micro Kernel)
아래는 pthread에 대한 예제 코드이다. 다음 코드에서 괄호 (A, B, C) 에 맞는 함수를 작성하시오
#include <pthread.h>
pthread_mutex_t mutex_lock;
...
void *t_function(void *data)
{
(C) (&mutex_lock);
// critical section
pthread_mutex_unlock(&mutex_lock);
}
int main()
{
pthread_t p_thread;
int state;
int a;
(A) (&mutex_lock, NULL);
pthread_create(&p_thread, NULL, t_function, (void *)&a);
...
(B) (&pthread, (void **)&status);
}
(A) : pthread_mutex_init, (B) : pthread_join, (C) : pthread_mutex_lock
아래는 TCP 소켓 생성과 관련된 예제 코드이다. 다음 코드에서 괄호 (A, B, C) 에 맞는 함수를 작성하시오
#include <sys/socket.h>
#include <arpa/inet.h>
int main(){
struct sockaddr_in client_addr, server_addr;
int ssock, csock;
int clen = sizeof(client_addr);
if((ssock = (A)(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0){
perror("socket error");
exit(1);
}
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(7777);
if( (B)(ssock, (struct sockaddr *) &server_addr, sizeof(server_addr)) < 0){
perror("bind error");
exit(1);
}
if( (C)(ssock, 8) < 0){
perror("listen error");
exit(1);
}
while(1){
csock = accept(ssock, (struct sockaddr *) &client_addr, &clen);
write(csock, "echo 111", 8);
close(csock);
}
}
(A) : socket, (B) : bind, (C) : listen
아래는 시그널 등록과 관련된 예제 코드이다. 다음 코드에서 괄호 (A, B) 에 맞는 함수를 작성하시오
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
struct sigaction act_new;
struct sigaction act_old;
void sigint_handler( int signo)
{
printf( "Ctrl-C 키를 눌루셨죠!!\n");
printf( "또 누르시면 종료됩니다.\n");
sigaction( SIGINT, &act_old, NULL);
}
int main( void)
{
act_new.sa_handler = (A); // 시그널 핸들러 지정
sigemptyset( &act_new.sa_mask); // 시그널 처리 중 블록될 시그널은 없음
// SIGINT를 지정하면서 act_old에 이전 정보를 구합니다.
(B)( SIGINT, &act_new, &act_old);
while( 1 ){
printf( "badayak.com\n");
sleep( 1);
}
}
(A) : sigint_handler, (B) : sigaction
'임베디드 기사 > 실기 - 임베디드 플랫폼' 카테고리의 다른 글
| 2. 임베디드 커널 프로그래밍 (0) | 2023.09.26 |
|---|---|
| 1. 임베디드 OS의 이해하기 (0) | 2023.09.26 |