1. 41번
poll과 epoll의 차이점에서 대한 설명으로 틀린 것은?
1) epoll은 커널에서 지원하는 기능이다.
2) 대용량 처리에서는 poll보다 epoll의 반응이 빠르다.
3) poll과 epoll은 POSIX 규약을 따르므로 서로 호환된다.
4) poll, epoll은 모두 시그널에 의해 인터럽트 될 수 있다.
3번
- 개념
1) poll
①<sys/poll.h>에 선언되어 있다.
- int poll(struct pollfd fds[], nfds_t nfds, int timeout);
ㄴ 성공 시 이벤트가 발생한 fd 갯수를 리턴한다. 타임아웃시 0, 오류 시 -1을 리턴
ㄴ pollfd 의 구조체는 아래와 같다. revents에 event가 발생하면 채워주게 된다.
typedef struct{
int fd;
short events;
short revents;
} pollfd;
2) epoll
① select 단점 극복하기 위해 커널 레벨의 멀티 플렉싱을 지원
② fd에 대한 루프를 돌지 않는다.
③ epoll_ctl을 통하여 탐지할 디스크립터를 지정하고, epoll_wait를 통해 파일 디스크립터 변화를 탐지한다.
④ <sys/epoll.h>에 선언되어 있다.
- int epoll_create(int size);
ㄴ 성공 시, epoll fd 를 리턴한다. 오류 시 -1을 리턴
- int epoll_ctl(int epoll_fd, epoll_fd int operate_enum, int enroll_fd, struct epoll_event* event);
ㄴ 성공 시, 0을 리턴한다. 오류 시 -1을 리턴
- int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout);
ㄴ 성공 시, 이벤트가 발생한 fd 갯수를 리턴한다. 오류 시 -1을 리턴
3) select
① 싱글스레드로 여러 개의 파일 입/출력을 관리하고자 할 때 사용할 수 있는 메커니즘
② <sys/select.h>에 선언되어 있다.
- int select(int nfds, fd_set *restrict readfds, fd_set *restrict writefds, fd_set *restrict errorfds, struct timeval *restrict timeout);
ㄴ 성공 시, 이벤트가 발생한 fd 갯수를 리턴한다. 타임아웃시 0, 오류 시 -1을 리턴
ㄴ fd_set의 구조체는 아래와 같다.
typedef struct{
int fds_bits[32];
} fd_set;
ㄴ 매개변수는 아래와 같다.
① nfds : 감시할 fds의 갯수
② readfds : 읽을 데이터가 있는지 확인
③ writefds : 쓰여진 데이터가 있는지 확인
④ exceptfds : 파일에 예외 사항이 있는지 확인
⑤ timeout : 데이터 변화를 감시하기 위하여 사용
2. 44번
메모리 장벽의 개념으로 틀린 것은?
1) 멀티 프로세서 환경에서는 메모리 접근 순서를 바꿀 수 없다.
2) 프로그램 실행 속도 향상을 위해 어셈블리 명령어 순서를 바꿀 수 있다.
3) 메모리 장벽은 어떤 어셈블리 명령어도 통과할 수 없는 방화벽과 비슷하다.
4) 메모리 장벽의 역할을 하는 어셈블리 명령어는 입출력 포트에 동작하는 모든
명령어가 포함된다.
1번
- 개념
1) 메모리 가시성
① 메모리 가시성 : 쓰레드에서 변경한 특정 메모리 값이 다른 쓰레드에 제대로 읽어지는지에 대한 것이다.
2) 메모리 장벽
① 메모리 장벽
- 그 전까지의 코어의 레지스터나 캐쉬값의 변경을 메인 메모리에 반영하는 것이다.
- 어떠한 어셈블리어도 통과하지 못하게 막는다.
ㄴ 컴파일러 최적화 옵션 혹은 멀티 프로세스 환경에서는 메모리 접근 순서를 바꿀 수가 있기 때문이다
- 일반적으로 동기화를 위한 lock이 사용하는 곳에는 암시적으로 메모리 장벽이 설치됨
3. 45번
다음 [보기]와 같은 조건에서 TCP소켓에 send(fd, buf, 3000, 0)을 호출하였다.
헤더가 추가되어 실제 전송되는 패킷의 크기는?
ㄱ. fd는 블록킹 모드로 작동하고 있다.
ㄴ. TCP, IP헤더의 옵션 필드는 사용자 않고 있다.
ㄷ. MSS는 1460이다.
1) 3080
2) 3120
3) 3160
4) 3200
2번
- 풀이
1) MTU (Maximum Transmission Unit)
- 최대 전송 단위
- MTU는 네트워크 하드웨어에서 설정한 데이터 전송 제한 최대 크기
2) TCP 패킷 구성

- 헤더 : 20 바이트
- 옵션 길이 : 총 32 비트 (4 바이트)
ㄴ type (1 바이트) : Maximum Segment Size(MSS) 옵션임을 알림 (= 2)
ㄴ length (1 바이트) : MSS 옵션이 차지하는 총 길이(크기)를 말함 (= 4)
ㄴ value (2 바이트) : MSS
3) UDP 패킷 구성

- 헤더 : 8 바이트
ㄴ Source Port (2 바이트) : 응용 프로그램의 포트 번호
ㄴ Destination Port (2 바이트) : 응용 프로그램의 포트 번호
ㄴ length (2 바이트) : 헤더와 Data를 합한 전체 길이
ㄴ Checksum (2 바이트)
4. 47번
다음 [코드]는 소켓 옵션을 설정하는 것이다. [코드]에 대한 설명으로 옳은 것은?
int sockopt=1;
setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &sockopt, sizeof(sockopt));
1) TCP 연결을 지체 없이 실행
2) TCP 전송 지연시간을 최소로 설정
3) TCP 네이글 알고리즘을 적용하지 않음.
4) 소켓이 사용하는 프로토콜을 TCP로 설정
3번
- 개념
1) <sys/socket.h>에 선언되어 있다
int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);
- s : 소켓 지정 번호
- level : 소켓의 레벨. 어떤 레벨의 소켓 정보를 가져오거나 변경할지 결정
ㄴ SOL_SOCKET, IPPROTO_TCP를 주로 사용
ㄴ 관련 내용은 해당 링크를 참조 한다.
- optname : 소켓옵션의 번호
- optval : 설정값을 저장하기 위한 버퍼의 포인터
- optlen : optval 버퍼 크기
2) Nagle 알고리즘
- 패킷들의 흘러 넘침을 막기 위해서 제안된 알고리즘
- 전송 횟수는 줄이고 묶어서 한 번에 보내는 방식을 사용
- Socket 옵션 (setsockopt)을 통해 Nagle 알고리즘을 적용시킬 수 있다.
ㄴ TCP_NODELAY 은 Nagle 알고리즘 적용을 해제하는 의미이다.
5. 49번
파일 작성 처리에서 mknod 시스템 콜의 처리 과정을 [보기]에서 바르게 나열한 것은?
[보기]
a. inode 연산(inode 조작)
b. 접근 권한 검사(may_create 함수)
c. 대상 디렉터리 탐색(path_lookup 함수)
d. dentry 해제(path_release 함수)
e. 작성할 파일 탐색(lookup_create 함수)
1) c->e->b->a->d
2) c->b->d->a->e
3) c->e->d->a->b
4) c->b->e->d->a
1번
- 개념
1) mknod
- 드라이버에 대응하는 특수 장치 파일(노드)를 만드는 시스템 콜이다.
6. 50번
교착상태 처리 방법이 아닌 것은?
1) 교착 상태를 예방하거나 회피하는 프로토콜을 사용한다.
2) 교착 상태에 있는 프로세스들 중 하나를 역으로 진행 시킨다.
3) 시스템이 교착 상태가 되도록 허용 후 회복시키는 방법을 사용한다.
4) 문제를 무시하고 교착 상태가 시스템에서 결코 발생하지 않는 척 한다.
2번
- 개념
1) 교착 상태 : 하나 혹은 둘 이상의 프로세스가 더 이상 계속 할 수 없는 어떤 특정 사건을 기다리고 있는 상태
2) 교착 상태 처리 방법
① 예방
- 사전에 교착 상태 가능성을 부정하는 방법이다.
- 4가지 교착 상태 발생 조건을 만족시키지 않게 하는 것이다.
ㄴ 점유 대기 조건 부정 : 각 프로세스는 필요한 자원을 한번에 요청한다.
ㄴ 비선점 조건 부정 : 자원을 요청한 자원이 사용 가능한지 검사하여 사용 가능하다면 점유하고 있는 자원을 반납
ㄴ 환형 대기 조건 부정 : 모든 프로세스에게 각 자원의 유형 별로 할당 순서를 부여
ㄴ 상호 배제 조건 부정 : 한번에 여러 개의 프로세스가 공유자원을 사용 할 수 있음
② 회피
- 시스템의 운영 중 상황을 보면서 교착 상태 가능성을 피해가는 것
- 은행가 알고리즘, 안전 알고리즘이 있음
③ 발견
- 시스템 운영 중 교착 상태가 일어나는 것을 결정하고 교착 상태에 관련된 프로세스와 자원을 발견하는 것
④ 회복
- 하나 또는 그 이상의 교착 상태 필요 조건을 제거
- 프로세스 중지나, 자원 선점 기법이 있음
⑤ 무시
- 교착 상태가 드물게 발생하는 경우 탐지 관련 지속적인 오버헤드 및 성능 저하를 일으키는 것보다 교착 상태 발생하는 것으로 함
7. 51번
XSI 메시지 큐의 msgsnd를 이용해서 메시지를 전송하려고 한다 [코드]에 대한 설명으로 틀린 것은?
struct mq_buf {
long mi;
char text[64];
}
msgsnd(msgid, (void *)&mq_buffer, 5, 2, IPC_NOWAIT);
1) msgsnd 호출은 넌블록킹으로 작동한다.
2) 전송되는 메시지의 타입은 2번이다.
3) 전송되는 메시지의 크기는 64 바이트이다.
4) msgsnd는 스레드 안전을 만족하는 함수이다.
3번
- 개념
1) 메시지 큐
- 스트림이 아닌 메시지 단위로 데이터 전송
- 특정 프로세스에게 메시지 단위로 전송이 가능하며, 메시지 전송에 우선순위가 부여됨
2) 메시지 큐 관련 시스템 콜
- <sys/ipc.h>, <sys/types.h>, <sys/msg.h>에 선언되어 있다.
- 생성, 송신, 수신 시스템 콜은 아래와 같다.
① 생성
int msgget(key_t key, int msgflg);
ㄴ key : 메시지 큐를 얻어올 때 사용하는 고유 값
ㄴ msgflg : 메시지 큐 생성 플래그 (IPC_CREAT, IPC_EXCL)
② 송신
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
ㄴ msqid : 메시지 큐 id
ㄴ msgp : 구조체 형식으로 아래와 같이 정해주어야 함
struct msgbuf {
long mtype; /* message type, must be > 0 */
char mtext[1]; /* message data */
};
ㄴ msgsz : 메시지 큐에 전송할 데이터 사이즈
ㄴ msgflg : 메시지 송신 플래그, 기본 동작은 blocking이며 IPC_NOWAIT 사용 시 Blocking되지 않고 실패
③ 수신
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
ㄴ msgid : 메시지 큐 id
ㄴ msgp : 읽어온 메시지
ㄴ msgsz : 메시지 읽을 크기
ㄴ msgtyp : 메시지 타입
ㄴ msgflg : 메시지 수신 플래그, IPC_NOWAIT 등이 사용된다.
8. 53번
fd는 넌블록킹 모드로 작동하는 소켓 파일 기술자이다. send(fd, buf, 1000, 0)으로 호출했을 때 설명으로 옳은 것은?
1) buf의 마지막에 널 종료 문자가 없다면 에러가 발생한다.
2) 넌블록킹 모드 소켓에서 send 호출은 비동기 I/O로 작동한다.
3) send가 512를 리턴했다면, 소켓 버퍼에는 488 바이트가 복사된 것이다.
4) 소켓의 송신 버퍼가 꽉 찼다면 -1로 리턴하며 errno는 EAGAIN이 된다.
4번
- 개념
1) EAGAIN : 사용 가능한 윈도우 크기를 모두 소모하고, 송신측의 송신 버퍼에도 가용할 수 있는 빈 버퍼 공간이 없을 때
9. 54번
가장 최근에 참조되지 않은 페이지를 교체할 페이지로 선택하는 페이지 교체 알고리즘은?
1) LFU
2) NUR
3) LRU
4) FIFO
2번
- 개념
1) 페이지 교체 알고리즘
2) 페이지 교체 알고리즘 종류
① LFU : Least Frequently Used 약어로 과거 참조 횟수가 가장 적은 페이지를 우선 교체 한다.
② NUR : Not Used Recently 약어로 최근에 사용하지 않은 페이지를 우선 교체 한다.
③ LRU : Least Recently Used 약어로 가장 오래 전에 참조가 이루어진 페이지를 우선 교체 한다.
④ FIFO : First In First Out의 약어로 가장 먼저 올라온 페이지를 우선적으로 교체
10. 58번
공유 메모리에 대한 설명으로 틀린 것은?
1) shmat은 shmid가 지정하는 메모리 영역과 호출 프로세스의 유효한 주소를 연관짓는다.
2) 메모리 일부를 공유하려면 먼저 반드시 shmat 시스템 호출로 공유 메모리가 생성되어야 한다.
3) shmdt는 shmat의 반대로 공유 메모리 영역을 프로세스의 논리적 주소 공간으로부터 떼어 내는 것이다.
4) 프로세스가 공유 메모리를 사용하려면 shmat 호출을 사용하여 공유 메모리 영역을 자신의 논리적 자료 공간에 명시적으로 부착한다.
2번
- 개념
1) 공유 메모리
- 서로 다른 프로세스가 특정 영역을 공유하도록 함
- 공유 메모리 생성은 최초 공유 메모리 영역을 만드는 프로세스가 커널에 할당 요청하면 이루어진다.
- 만들어진 공유 메모리는 커널에 의해서 관리 되게 된다.
- 직접 공유 메모리를 삭제시켜주지 않으면 계속적으로 유지되게 된다.
# References
- 리눅스 select, poll, epoll — 하프연구소 (tistory.com)
- http://www.ktword.co.kr/test/view/view.php?m_temp1=836
- https://blog.naver.com/PostView.nhn?blogId=sujunghan726&logNo=220316487529
- REAKWON :: [리눅스] 메시지 큐(message queue) 개념과 예제(msgget, msgsnd, msgrcv, msgctl) (tistory.com)
- [OS] 페이지 교체 알고리즘 (FIFO, LRU, LFU, NRU, NUR) (tistory.com)
'임베디드 기사 > 필기 - 임베디드 플랫폼' 카테고리의 다른 글
| 2018년 임베디드 플랫폼 필기 기출 오답 정리 (0) | 2023.09.05 |
|---|---|
| 2017년 임베디드 플랫폼 필기 기출 오답 정리 (0) | 2023.09.03 |
| 2016년 임베디드 플랫폼 필기 기출 오답 정리 (0) | 2023.09.02 |
| 2019년 임베디드 플랫폼 필기 기출 오답 정리 (0) | 2023.08.27 |