ABOUT ME

-

Today
-
Yesterday
-
Total
-
choco@desktop:~/tistory
$ 정보처리기사 요점정리
1과목 2과목 3과목 4과목 5과목 실기

$ Linux Kernel
Power Management DVFS
  • 정보처리기사 필기 4과목 - 프로그래밍 언어 활용 (빈출 요점 정리)
    시험 요점정리 (꽃길)/정보처리기사 2021. 7. 29. 23:11

    정보처리기사 필기 빈출 개념과 기출문제를 정리하였습니다.

    공부할 시간이 부족할 경우 아래의 개념을 먼저 학습해보시고, 기출문제들을 최소 3회차를 풀어볼 것을 권장합니다.

    (기출문제: https://www.comcbt.com/xe/iz)

    (전체 목차 및 다른 과목 링크: https://computer-choco.tistory.com/437)

     

    정보처리기사20200926(해설집).hwp
    0.11MB
    정보처리기사20200822(해설집).hwp
    0.13MB
    정보처리기사20200606(해설집).hwp
    0.10MB

    (기출문제 출처는 위의 링크와 같습니다 - comcbt.com)

     

    정보처리기사 필기 4과목 - 프로그래밍 언어 활용 빈출 개념 & 기출 문제

     

    1. 결합도와 응집도

    2. IPv6

    3. OSI 7계층

    4. TCP와 UDP

    5. 쉘과 커널

    6. SJF vs. HRN 스케줄링

    7. 페이지 교체 알고리즘

    8. 자료형 & 변수 규칙

    9. 접근 제한자

    10. 프로그램 실행 결과

     

    보너스. 교착 상태

    보너스. 기억장치 배치 전략


    1. 결합도와 응집도 ★★★

    교재 단원: 서버프로그램 구현

    정보처리기사 필기 (2020.06.06 ~ 2020.09.22) 의 3번의 시험 중 출제율 100%에 해당하는 개념입니다.

    (결합도도 100%, 응집도도 100% 나오므로 두 개 다 외우셔야합니다)

     

    모듈은 소프트웨어의 성능을 향상시키거나 수정 및 재사용을 용이하게 하기 위해 기능 단위로 분해한 것을 말합니다. 독립성이 높은 모듈일수록 모듈을 수정하더라도 다른 모듈들에게는 거의 영향을 미치지 않고, 오류가 발생하더라도 쉽게 발견하고 수정할 수 있다는 장점이 있습니다. 그러면 재사용도 용이하고 수정해도 문제 발생이 적어야하니 모듈의 독립성을 높여야겠죠?

     

    모듈의 독립성을 높이기 위해서는 결합도(Coupling)를 약하게, 응집도(Cohesion)를 강하게 해야합니다. (결합도와 응집도는 실기에서도 잘 출제되는 것이므로 의미를 잘 알아두시면 좋습니다.)

     

    결합도는 모듈 간에 상호 의존하는 정도, 두 모듈 사이의 연관 관계를 의미합니다. 응집도는 모듈 내부 요소들이 서로 관련되어 있는 정도를 의미합니다. 결합도는 모듈 간, 응집도는 모듈 내 입니다. 그러면 모듈 내는 끈끈할수록, 모듈 간은 서로 연관이 없어야 독립적이겠죠? 그래서 결합도는 낮을수록, 응집도는 높을수록 좋습니다.

     

    시험 문제에서는 이런 의미도 나오지만 결합도 종류별 세기, 응집도 종류별 세기를 묻습니다. 세기 순서대로 외워두는 것이 중요합니다.

     

    결합도의 종류는 다음과 같습니다.

    [그림 출처] https://hyeonukdev.github.io/2020/05/31/Engineer_Information_Processing/%EC%98%A4%EB%8B%B5%EB%85%B8%ED%8A%B8/%

     

    응집도의 종류는 다음과 같습니다.

    [그림 출처] https://hyeonukdev.github.io/2020/05/31/Engineer_Information_Processing/%EC%98%A4%EB%8B%B5%EB%85%B8%ED%8A%B8/%E

     

    이름과 뜻을 매칭하는 문제도 나오는데, 너무 꼼꼼하게 외우실 필요는 없습니다. 키워드만 외우셔도 문제를 풀 수 있습니다. 혹시 너무 시간이 부족하다면 강하고 약한 정도만 먼저 외우셔도 됩니다. 결합도는 "공 외제스데", 응집도는 "우논시절 통순" 입니다. 결합도의 '내'가 가장 강하고 응집도의 '기'가 가장 셉니다. (혹시 내공 외제스데랑 우논시절 통순기 주에 뭐가 응집도인지 헷갈리시면 우논시절의 응집도 둘다 ㅇ 으로 시작한다고 외워주시면 됩니다.) 실제로 외우실 때 강한 거에 더 세기나 억양을 줘서 외우면 강하고 약한 순서가 더 잘 외워지실 것 같습니다. 내! 공 외제스데, 우논시절 통순 기!

     

    ※ 내공외제스데를 내공외제스자로 외우기도 하는데요, (자료 결합도 = 데이터 결합도) 내공 외제스데가 더 입에 잘 붙어서 앞글자로 외울 때는 이걸 추천드립니다.

     

    결합도와 관련된 문제를 먼저 풀어보겠습니다.

    64. 시스템에서 모듈 사이의 결합도 (Coupling) 에 대한 설명으로 옳은 것은?

    (1) 한 모듈 내에 있는 처리요소들 사이의 기능적인 연관 정도를 나타낸다.
    (2) 결합도가 높으면 시스템 구현 및 유지보수 작업이 쉽다.
    (3) 모듈 간의 결합도를 약하게 하면 모듈 독립성이 향상된다.
    (4) 자료결합도는 내용 결합도보다 결합도가 높다.

    (2020.06.06 정보처리기사 필기 기출문제 - 출처: 전자문제집 CBT)

    답을 찾으셨나요? 답은 3번입니다. 결합도가 약하면 독립성이 향상됩니다. 1번은 모듈 내는 응집도를 의미합니다. 2번은 유지보수가 쉬우려면 결합도가 낮아야겠죠. 4번은 내공 외제스데를 보시면 내가 가장 셉니다.

     

    다음은 응집도 문제를 풀어보겠습니다.

    70. 다음이 설명하는 응집도의 유형은?

    모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 그 기능을 순차적으로 수행할 경우의 응집도

    (1) 기능적 응집도
    (2) 우연적 응집도
    (3) 논리적 응집도
    (4) 절차적 응집도

    (2020.08.22 정보처리기사 필기 기출문제 - 출처: 전자문제집 CBT)

    답은 4번입니다. 응집도의 세기를 비교하는 문제도 (우논시절 통순기를 이용하는...) 잘 출제가 되지만, 이런 유형의 문제도 출제된 적이 있다는 것을 보여드리고자 가져왔습니다. 설명을 보면 순차적으로 수행한다고 되어있는데요, 기능, 우연, 논리, 절차 중에 순서대로와 가장 관련 있는 것은 4번 절차적 응집도일 것입니다.


    2. IPv6 ★★

    교재 단원: 응용 SW 기초기술 활용

    정보처리기사 필기 (2020.06.06 ~ 2020.09.22) 의 3번의 시험 중 2번 출제된 개념입니다.

     

    IP 주소 (Internet Protocol Address) 는 컴퓨터 네트워크에서 장치들이 서로를 인식하고 통신을 하기 위해서 사용하는 고유 주소입니다. 현재 사용중인 32 bit IP 주소 체계인 IPv4는 새로 부여할 수 있는 주소가 부족하다는 문제가 있었습니다. 그래서 주소 고갈의 대응책으로 128 bit로 표현할 수 있는 IPv6가 나온 것입니다. IPv4는 127.0.0.1 같은 주소입니다. (저희가 친숙한 IP 주소이죠.) 이걸로 표현할 수 있는 숫자에 한계가 생겨서 나온 IPv6는 2dfc:0:0:0:0217:cbff:fe8c:0 같이 생겼습니다. 훨씬 많은 주소를 할당해줄 수 있겠죠?

     

    IPv4에 비해 IPv6 가 되면서 생긴 장점이 많습니다. 자료 전송 속도도 더 빨라졌고, 보안성도 더 강화되었고, 확장성도 뛰어납니다. 더 나중에 나온 것이니까 당연히 이런 것들이 더 발전된 것이겠죠.

     

    + IPv4의 전송 방식은 유니캐스트, 멀티캐스트, 브로드캐스트 (Broadcast) 이고, IPv6 의 전송 방식은 유니캐스트 (Unicast), 멀티캐스트 (Multicast), 애니캐스트 (Anycast) 로 3가지가 있습니다. (IPv6의 3개는 애, 니, 멀로 외우시면 잘 외워질 것 같습니다. 선택지에서 보게 된다면 애,니,멀에 속하지 않는 브로드캐스트는 IPv4 에 속하게 됩니다.) 혹시 뜻이 궁금하시다면 (필기 시험에서는 뜻을 물어본 적은 없습니다) 브로드캐스트는 같은 네트워크에 있는 모든 장비들에게 보내는 통신입니다. (아파트 관리사무소 방송 같은 것으로 신호를 받고 싶지 않아도 무조건 받게 됩니다.) 유니캐스트는 특정한 한 대상에게만 보냅니다. 멀티캐스트는 특정 그룹을 지정해서 해당 그룹원에게만 보냅니다. 애니캐스트는 가장 가까운 1명에게만 전송합니다. (더 자세히 알고 싶다면? https://togll.tistory.com/42)

     

    이제 문제를 풀어보겠습니다.

    61. IPv6에 대한 설명으로 틀린 것은?

    (1) 128 비트의 주소 공간을 제공한다.
    (2) 인증 및 보안 기능을 포함하고 있다.
    (3) 패킷 크기가 64 Kbyte 로 고정되어 있다.
    (4) IPv6 확장 헤더를 통해 네트워크 기능 확장이 용이하다.

    (2020.06.06 정보처리기사 필기 기출문제 - 출처: 전자문제집 CBT)

    답은 3번입니다. 1번은 정확히 몰랐어도 숫자가 크다는 느낌이 드실 수 있을 것 같습니다. IPv4는 32 bit, IPv6는 128 bit입니다. 2번은 인증 및 보안 기능을 포함하고 있는 것은 IPv4 보다는 더 나중에 나온 IPv6이겠죠. 4번은 확장이 용이하다인데 이것 또한 IPv4보다 더 나중에 나온 IPv6 일 것입니다. 3번은 패킷 크기에 대해서는 설명드리지 않았지만 고정되어있다? 에서 의심을 해보시면 됩니다. 정확히는 IPv4의 패킷 크기가 64 Kbyte로 고정된 것이고, IPv6는 임의로 큰 크기의 패킷을 주고 받을 수 있습니다.


    3. OSI 7계층 ★★★

    교재 단원: 응용 SW 기초기술 활용

    정보처리기사 필기 (2020.06.06 ~ 2020.09.22) 의 3번의 시험 중 100% 출제된 개념입니다.

     

    OSI 7계층은 다음과 같습니다.

    [그림 출처] https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=o8640o&logNo=221216541147

     

    OSI 7계층 순서를 외울 때는 물데네전세표응 으로 많이 외우는데요 (영문 버전으로 외우는 경우에는 아A 파P 서S 탈T 났N 다D PHY픽 으로 외우는 것도 쉽습니다), 필기 시험에서는 뜻과 내용을 매칭하는 것을 많이 묻게 됩니다.

    - 물리 계층을 외울 때는 '물리적 전송 매체' 에 집중하시면 됩니다.

    - 데이터 링크 계층은 '신뢰성 있는 링크'로 변환시켜줍니다.

    - 네트워크 계층은 개방 시스템 간 '네트워크 연결 관리'를 합니다.

    - 전송 계층은 종단 시스템 간 투명한 '데이터 전송'이 가능하게 합니다.

    - 세션 계층은 송,수신 측 간의 관련성을 유지하고 대화 제어를 담당합니다. (세션이라는 단어가 딱히 나오지는 않습니다.) 송수신 간 대화 세션을 열어주는 것입니다.

    - 표현 계층은 응용 계층에서 받은 것을 세션 계층에 보내기 전에 '형태를 변환'하는 기능을 합니다.

    - 응용 계층은 '응용 프로그램 (= Application) 이 접근'할 수 있는 서비스를 제공합니다.

     

    키워드가 잘 외워지셨나요? 문제를 풀어보겠습니다.

    68. OSI-7계층에서 종단 간 신뢰성 있고 효율적인 데이터를 전송하기 위해 오류 검출과 복구, 흐름 제어를 수행하는 계층은?

    (1) 전송 계층
    (2) 세션 계층
    (3) 표현 계층
    (4) 응용 계층

    (2020.06.06 정보처리기사 필기 기출문제 - 출처: 전자문제집 CBT)

    답이 잘 찾아지셨나요? 조금 헷갈리셨을 수도 있을 것 같습니다. 데이터 전송이라는 키워드를 잘 외우셨다면 1번을 답으로 잘 선택하셨을 것입니다. 그러나 신뢰성이라는 표현은 보통 데이터 링크 계층을 설명할 때 많이 나오기 때문에 보기에서 왜 데이터 링크 계층이 없는 것이지? 하고 찾으셨을 수도 있습니다. 출제자 분도 그 정도 함정을 노린 것은 아니었는지 보기에 넣지 않았습니다. 데이터 링크가 아니란 걸 깨닫고 문제에서 '데이터 전송'을 보고 전송 계층을 선택하셨으면 됩니다.

     

    문제가 계속 출제되지만 잘 외우지 않으면 실수하기 쉽기 때문에, 한번 더 풀어보겠습니다.

    65. OSI 7계층에서 단말기 사이에 오류 수정과 흐름 제어를 수행하여 신뢰성 있고 명확한 데이터를 전달하는 계층은?

    (1) 전송 계층
    (2) 응용 계층
    (3) 세션 계층
    (4) 표현 계층

    (2020.09.26 정보처리기사 필기 기출문제 - 출처: 전자문제집 CBT)

    이번 문제는 답이 잘 골라지셨나요? 전송 계층을 '데이터 전송' 이라고 외웠는데 문제에서 쉽게 힌트를 주지 않고자 '데이터 전달' 이라는 표현을 썼죠. 혹시 답이 바로 보이지 않으셨다면 보기를 보면서 키워드를 떠올려 보시면 좋을 것 같습니다. 전송 계층은 '데이터 전송', 응용 계층은 '응용 프로그램', 세션 계층은 '대화 세션', 표현 계층은 '형태 변환' 이 중에서 보기에서 주어진 설명에 가장 가까운 것은 1번 전송 계층이겠죠?


    4. TCP와 UDP ★★

    교재 단원: 응용 SW 기초기술 활용

    정보처리기사 필기 (2020.06.06 ~ 2020.09.22) 의 3번의 시험 중 2번 출제되었습니다.

     

    TCP/IP (Transmission Control Protocol / Internet Protocol) 은 인터넷에 연결된 서로 다른 기종의 컴퓨터들이 데이터를 주고 받을 수 있게 하는 표준 프로토콜입니다. OSI 7계층처럼 TCP/IP도 응용 계층, 전송 계층, 인터넷 계층, 네트워크 액세스 계층으로 나뉩니다. (그러나 OSI 7계층처럼 이름과 설명 매칭하기 문제는 내지 않습니다.) 프로토콜은 일종의 약속된 규칙이라고 이해하시면 됩니다.

     

    예를 들어, TCP/IP 의 프로토콜 중 인터넷 계층에 해당하는 ARP / RARP 가 시험에 출제된 적이 있습니다. "2. IPv6" 에서 IP 주소가 네트워크 통신을 하기 위한 주소라는 것을 알려드렸는데요, 이와 반대되는 개념으로 실제 물리 주소는 MAC 주소 (Media Access Control Address) 라고 부릅니다. 정확하게 목적지에 도달하기 위해서는 결국 MAC 주소를 찾아가야하는데요 (가상의 IP 주소를 발급받아 사용하지만 결국 여러분의 컴퓨터에 연결된 랜선으로 물리적으로 찾아와야겠죠?), IP 주소를 MAC 주소로 변환해주는 규칙이 있는데 이를 ARP (Address Resolution Protocol) 이라고 부릅니다. 반대로 MAC 주소를 IP 주소로 변환하는 방향도 있겠죠? 이는 RARP (Reverse ARP) 라 합니다.

     

    그런데 이보다 더 중요한 TCP/IP 프로토콜 중 응용 계층에 해당하는 TCP vs. UDP 개념이 있습니다. 둘의 특징을 잘 구별해주시면 됩니다. TCP (Transmission Control Protocol) 는 1대 1로 서로 악수하고 신뢰성있게 경로를 확립해서 통신합니다. 하지만 UDP (User Datagram Protocol)는 그런 신뢰 관계가 없습니다. 데이터 전송 전에 연결 설정을 하지 않아서 신뢰성이 별로 없습니다. 그냥 보내버리기 때문에 속도는 더 빠릅니다. 아래 표를 달달 외우지 않아도, TCP는 1:1 로 상대방이 나와 연결이 잘 되었는지 확인하는 절차를 거치기 때문에 느리다는 것들이 이해가 되실 것 같습니다. 반면 UDP는 1:N 통신도 가능하고, 상대가 받는지 수신 여부도 확인하지 않으며 속도는 더 빠르게 됩니다.

    [그림 출처] https://mangkyu.tistory.com/15

    문제를 풀어보겠습니다.

    69. TCP 프로토콜에 대한 설명으로 거리가 먼 것은?

    (1) 신뢰성이 있는 연결 지향형 전달 서비스이다.
    (2) 기본 헤더 크기는 100 byte 이고 160 byte 까지 확장 가능하다.
    (3) 스트림 전송 기능을 제공한다.
    (4) 순서제어, 오류제어, 흐름제어 기능을 제공한다.

    (2020.08.22 정보처리기사 필기 기출문제 - 출처: 전자문제집 CBT)

    답은 2번입니다. 1번의 신뢰성있는 연결 지향 서비스는 맞는 설명이죠. 신뢰성 있는 프로토콜 답게 4번과 같은 오류 제어 기능 등도 제공합니다. 2번과 3번이 헷갈리셨을 것 같습니다. 이번 문제를 통해 다음에 보기에서 이런 내용이 나오면 틀리지 않도록 한번 봐두면 좋을 것 같습니다. 스트림 전송 기능은 TCP 프로토콜의 특징이 맞습니다. 데이터 열을 순차적으로 전송하는 것입니다. (TCP는 순차적으로 보내는 전송 순서를 보장합니다.) 그러나 2번에서 언급한 TCP의 기본 헤더 크기는 최소 20 byte, 최대 60 byte입니다. UDP는 더 작은 8 byte 입니다.

     

    문제를 통해 차이도 잘 구별되었고, 새로운 정보도 습득하셨다면 한번 더 연습해보겠습니다.

    76. UDP 특성에 해당되는 것은?

    (1) 데이터 전송 후, ACK를 받는다.
    (2) 송신 중에 링크를 유지 관리하므로 신뢰성이 높다.
    (3) 흐름제어나 순서제어가 없어 전송속도가 빠르다.
    (4) 제어를 위한 오버헤드가 크다.

    (2020.09.26 정보처리기사 필기 기출문제 - 출처: 전자문제집 CBT)

    답은 3번입니다. 1번은 수신을 확인하는 TCP 의 특징입니다. 2번에 신뢰성이 높다는 것 또한 TCP의 특징일 것입니다. 4번은 제어를 하는 것도 TCP이므로 좀 더 부하 (오버헤드)가 걸릴 수 있는 것도 TCP 일 것입니다. 그런 제어가 없는 UDP는 전송 속도가 빠릅니다.


    5. 쉘과 커널 ★★★

    교재 단원: 응용 SW 기초기술 활용

    정보처리기사 필기 (2020.06.06 ~ 2020.09.22) 의 3번의 시험 중 운영체제 관련 개념은 100% 출제되었습니다.

     

    운영체제 (OS; Operating System) 이란 컴퓨터 시스템의 자원들을 효율적으로 관리하여, 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 프로그램의 모임입니다. 운영체제의 종류는 Windows (저희가 대개 사용하는 것이죠), 리눅스 (Linux), 유닉스 (Unix), MacOS (맥북에 들어있는 운영체제입니다), 안드로이드 (Andriod) 가 있습니다. 운영체제의 특징도 때때로 시험에 나오는데, 운영체제는 CPU, 메모리 공간, 기억 장치, 입출력 장치 같은 자원을 관리하는 역할을 합니다. 또한 자원의 현재 상태를 파악하고 자원 분배를 위한 스케줄링도 합니다. 특징들을 보면 공통적으로 '자원을 관리'한다는 키워드가 있기 때문에 문제에서도 옳은 보기와 아닌 것을 잘 고르실 수 있을 것입니다.

     

    하지만 암기가 좀 필요한 커널과 쉘에 대해서 추가적인 설명을 드리고자 합니다. 운영체제는 인터페이스인 쉘과, 내부의 커널로 이루어져있습니다. 쉘은 영어로 조개 껍데기란 뜻인데요, 내부가 아닌 겉 껍데기입니다. 그러면 쉘 (Shell) 이 하는 역할은 사용자 명령에 대한 처리를 담당하게 됩니다. 고객 (사용자) 를 맞이하는 비서의 역할로 생각하시면 될 것 같습니다. 이에 반해 커널 (Kernel) 은 견과류의 알맹이를 뜻하는 단어인데요, 운영체제의 내부에서 하드웨어 자원을 관리하는 중심 역할을 한다고 보시면 됩니다. 쉘이라는 비서를 둔 커널 사장님으로 이해하시면 될 것 같습니다.

     

    커널과 쉘이 잘 구별이 되셨나요? 문제를 풀어보겠습니다.

    64. 운영체제에서 커널의 기능이 아닌 것은?

    (1) 프로세스 생성, 종료
    (2) 사용자 인터페이스
    (3) 기억 장치 할당, 회수
    (4) 파일 시스템 관리

    (2020.09.26 정보처리기사 필기 기출문제 - 출처: 전자문제집 CBT)

    답은 2번입니다. 사용자 인터페이스는 커널이 아니라 쉘의 기능입니다. 그 외에 프로세스를 만들고, 기억 장치를 할당하고, 파일 시스템을 관리하고 같이 자원을 관리하고 분배하는 역할은 커널의 기능이 맞습니다.

     

    ※ 프로세스와 스레드의 특징을 물어보는 문제도 출제된 적 있는데, 프로세스는 메모리에 올라와 실행되고 있는 프로그램을 의미합니다. 스레드는 프로세스 내의 자원을 이용하는 실행 단위입니다. 그래서 자원을 공유하면서 한 프로세스 내에 여러 스레드가 돌 수 있습니다. (조금만 더 구체적으로 공부하고 싶다면? https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html)

     

    다른 문제를 하나 더 풀어보겠습니다.

    66. UNIX의 쉘 (Shell) 에 관한 설명으로 옳지 않은 것은?

    (1) 명령어 해석기이다.
    (2) 시스템과 사용자 간의 인터페이스를 담당한다.
    (3) 여러 종류의 쉘이 있다.
    (4) 프로세스, 기억장치, 입출력 관리를 수행한다.

    (2020.06.06 정보처리기사 필기 기출문제 - 출처: 전자문제집 CBT)

    두 문제를 풀면서 커널과 쉘의 차이가 완전히 이해가 되셨나요? 답은 4번입니다. 쉘은 명령어 해석을 하는 것이고, 사용자 인터페이스이고, 종류도 여러 개가 있겠지만 4번은 커널의 기능에 대한 설명이었습니다.


    6. SJF vs. HRN 스케줄링 ★★★

    교재 단원: 응용 SW 기초기술 활용

    정보처리기사 필기 (2020.06.06 ~ 2020.09.22) 의 3번의 시험 중 100% 출제되었습니다.

     

    프로세스 스케줄링이란 프로세스가 생성되어서 실행될 때 필요로하는 시스템의 여러 자원을 해당 프로세스에 할당하는 작업입니다. (프로세스는? 여러분이 직접 코드를 짜서 프로그램을 만들고, 그것을 실행시키면 프로그램은 프로세스가 됩니다.) 간단히 생각하면 여러 프로세스들 중에 이번엔 누굴 실행시키고, 다음엔 누굴 실행시키고 이런 것을 결정하는 방법인 것입니다.

     

    프로세스 스케줄링 기법에는 선점 기법이 있고, 비선점 기법이 있습니다. 선점은 프로세스가 자원을 할당받아서 돌고 있을 때 우선순위가 높은 다른 프로세스가 자원을 강제로 뺏어서 자기가 도는 것입니다. (설명을 보면 굉장히 나쁜 깡패같은 느낌이네요...) 시험에는 비선점 기법이 많이 출제가 되었습니다. 비선점 기법은 이미 할당되면 다른 프로세스가 강제로 빼앗을 수 없습니다. (스케줄링 기법의 더 다양한 종류를 알고 싶다면? https://liveyourit.tistory.com/236)

     

    비선점 기법 중 시험에 많이 출제되는 것이 SJF와 HRN입니다. SJF (Shortest Job First) 는 이름 그대로 실행시간이 가장 짧은 프로세스를 가장 먼저 실행시켜줍니다. (사람들이 줄서서 자기 차례를 기다리는데, 저 진짜 5분이면 돼요!! 하면서 먼저 처리받는 것이죠.) HRN (Highest Response-ratio Next) 는 SJF 의 단점을 보완하기 위해 만들어졌습니다. SJF에서는 짧은 걸 무조건 먼저 실행시키기 때문에 실행 시간이 길면 너무 오래 기다리게 될 수도 있습니다. 그래서 새롭게 우선순위를 구하는 공식을 만든 것입니다. HRN 우선순위 공식은 다음과 같습니다.

     

    HRN 우선순위 계산 공식 = (대기시간 + 서비스 (실행) 시간) / 서비스 (실행) 시간

    실행 시간에 대기 시간까지 더해서 실행 시간으로 나눠줍니다. 그러면 엄청 오래 기다린 손님은 대기시간이 커지면서 결과값인 우선순위가 큰 값이 나오겠죠? 그런 손님은 얼른 실행을 시켜주는 것입니다. 혹은 실행 시간이 엄청 짧으면 저 공식에서 나누는 값이 작으니까 우선순위가 상대적으로 커질 수 있겠죠? 그런 손님도 얼른 실행을 시켜줄 수 있습니다. 단순히 짧다고 무조건 먼저 실행되는 것이 아니라, 대기 시간까지 고려하는 방식입니다. 이전보다는 조금 더 공평할 수 있을 것 같습니다.

     

    문제를 풀어보겠습니다.

    70. 다음과 같은 프로세스가 차례로 큐에 도착하였을 때, SJF (Shortest Job First) 정책을 사용할 경우 가장 먼저 처리되는 작업은?


    (1) P1
    (2) P2
    (3) P3
    (4) P4

    (2020.09.26 정보처리기사 필기 기출문제 - 출처: 전자문제집 CBT)

    문제는 굉장히 쉬우셨을 것 같습니다. 이름 자체가 Shortest Job First 이니까요. 답은 4번이었습니다.

     

    그러면 한 문제를 더 풀어보겠습니다.

    66. HRN 방식으로 스케줄링 할 경우, 입력된 작업이 다음과 같을 때 처리되는 작업 순서로 옳은 것은?


    (1) A->B->C->D
    (2) A->C->B->D
    (3) D->B->C->A
    (4) D->A->B->C

    (2020.08.22 정보처리기사 필기 기출문제 - 출처: 전자문제집 CBT)

    공식이 잘 외워지셨나요? (대기시간 + 서비스시간) / 서비스시간으로 계산하면 답은 3번이 됩니다. A = 1.25, B = 3, C =1.33..., D = 11 입니다.


    7. 페이지 교체 알고리즘 ★★

    교재 단원: 응용 SW 기초기술 활용

    정보처리기사 필기 (2020.06.06 ~ 2020.09.22) 의 3번의 시험 중 2번 출제되었습니다.

     

    페이지 교체 알고리즘 기법을 시뮬레이션하는 문제가 출제가 됩니다. 페이지란 가상 기억 장치를 모두 같은 크기의 블록으로 나눈 단위입니다. (그러면 가상 기억 장치는 또 뭐지? 하게 될 것 같습니다. 실제로 메모리가 크지 않더라도 가상으로 몇 GB 크기를 가진 것처럼 추상화합니다. 여러분이 크롬도 열고, 워드도 열고, 게임을 동시에 열어도 각각 프로그램들에 다 가상 메모리를 할당해주기 때문에 다 열릴 수가 있습니다. 그래도 당연히 가상 메모리는 결국은 물리 메모리랑 연결 (매핑)이 되어있습니다.) 이렇게 가상 기억 장치를 페이지로 나눠서 관리하는데요. 프로세스를 돌리다가 필요한 부분 (페이지) 가 물리적으로는 없을 수가 있습니다. 물리적인 메모리는 한계가 있기 때문에 모든 추상적인 메모리 내용이 다 올라와있지 않습니다. 그래서 필요하면 그 부분 (페이지) 를 새로 불러와서 물리적인 메모리에 올리는 것을 페이지 교체 알고리즘이라고 합니다. 예를 들어, 워드로 글을 열심히 작성하다가 (그러면 글 작성과 관련된 프로그램 부분 (페이지)만 있으면 됩니다) 갑자기 그림을 추가하고 싶습니다. 그러면 그림과 관련된 프로그램 부분 (페이지) 를 불러와야 실행이 됩니다. 그러면 기존에 글 작성과 관련된 페이지는 필요가 없겠죠? 이런 필요 없는 페이지들을 교체하는 방법입니다.

     

    페이지 교체 알고리즘에서 가장 대표적인 것은 FIFO (First In First Out; 선입선출) 알고리즘입니다. 이름 그대로 먼저 들어온 것 (즉, 가장 오래 있었던 것) 을 교체하는 것입니다. 기존 시험 문제도 2번 다 FIFO 알고리즘만 출제가 되었습니다. 그 외에 출제 가능성이 있는 것은 LRU (Least Recently Used) 와 LFU (Least Frequently Used) 입니다. 이름 그대로 LRU는 최근에 가장 오랫동안 사용하지 않은 페이지를 교체하는 것입니다. LFU는 사용 빈도가 가장 적은 페이지를 교체하는 기법입니다.

     

    문제에서는 페이지 프레임의 수를 알려줍니다. 동시에 물리적으로 존재할 수 있는 페이지의 수입니다. 그 개수가 꽉 차면 가장 먼저 들어온 것을 교체해주면 됩니다. 또한 문제에서 묻는 것은 페이지 부재 (Page Fault) 인데요. 필요한 페이지가 현재 프레임 중에 없어서 새로 데려와야할 때, 필요한 페이지가 없는 것을 페이지 부재라고 합니다.

     

    예를 들어, 이런 식으로 풀면 됩니다.

    할당된 페이지 프레임의 수는 4개이고, 참조 페이지 번호 (순서대로 참조할 페이지 번호를 알려줍니다) 가 다음과 같을 때, 페이지 부재의 횟수는?

    <참조 페이지 번호> 0, 1, 2, 3, 0, 1, 4, 0, 1, 2, 3, 4

    [그림 및 문제 출처] https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=botemi11&logNo=220062848209

    그러면 처음에는 0이 들어옵니다. 0도 없어서 페이지 부재가 되어서 데려온 것입니다. 그 다음에 1 페이지가 필요한데 기존에 없으니까 페이지 부재가 발생하면서 1을 가져옵니다. 이제 0, 1이 됩니다. 그 다음에 2 페이지가 필요한데, 이것도 없으니 페이지 부재가 발생하면서 가져오고 0, 1, 2가 됩니다. 3도 같은 방식으로 채워집니다. 그 다음 0이나 1은 기존에 있기 때문에 페이지 부재가 발생하지 않았습니다.

     

    그러나! 4는 기존에 없습니다. 페이지 부재가 발생했는데 프레임이 꽉 차서 기존에 있는 페이지 번호 중 하나를 교체해야하는데요. FIFO 방식의 경우 가장 먼저 들어온 0 자리를 빼앗아 4로 바꿔줍니다. 그 다음에 다시 0을 찾으려하는데, 교체되어서 없죠. 페이지 부재가 또다시 발생합니다. 이번에는 그 다음으로 오래 있었던 1의 자리를 빼앗고 0이 들어왔습니다. 이런 식으로 FIFO 방식을 하면 페이지 부재는 10번이 발생하게 됩니다.

     

    혹시 LRU 방식으로 한다면? 가장 오랫동안 사용되지 않은 페이지를 교체하는 것이라면, (사실 따지기가 복잡하니까 문제에서 대부분은 FIFO로 출제할 것 같습니다.) 위의 예시에서 4가 들어와서 기존 프레임에서 하나를 빼야했을 때, 가장 오랫동안 쓰이지 않은 2가 자리를 빼앗기게 될 것입니다. (2, 3, 0, 1, 4 순으로 페이지 참조를 했기 때문에 가장 오랫동안 사용 안 된 것은 2였습니다.) LFU는 페이지가 몇 번 참조되었는지 빈도수를 관리하면서 풀어보실 수 있을 것입니다. 예를 들어, 4가 들어왔을 때 0은 2번, 1도 2번, 2와 3은 1번씩 참조되었으므로 2나 3의 자리를 빼앗기게 될 것입니다. 

     

    문제를 풀 때 한 가지 주의해야할 점은 처음에 있었던 0과 페이지 프레임에서 쫓겨난 뒤에 나중에 다시 들어온 0은 같은 것으로 취급하면 안 됩니다. 새로 들어오게 되면 마치 새로운 숫자가 들어온 것처럼 봐야하며, FIFO 알고리즘으로 쫓겨날 때도 이제 막 막내로 들어왔으니 마지막으로 쫓겨나게 될 것입니다.

     

    실제 기출 문제를 풀어보겠습니다.

    77. 다음의 페이지 참조 열 (Page reference string) 에 대해 페이지 교체 기법으로 선입선출 알고리즘을 사용할 경우 페이지 부재 (Page Fault) 횟수는? (단, 할당된 페이지 프레임 수는 3이고, 처음에는 모든 프레임이 비어있다.)

    <페이지 참조 열>
    7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0

    (1) 13
    (2) 14
    (3) 15
    (4) 20

    (2020.06.06 정보처리기사 필기 기출문제 - 출처: 전자문제집 CBT)

    답은 2번입니다. 헷갈리신다면 페이지 프레임을 순서대로 써보면서 풀어보시면 쉽게 답이 구해지실 것입니다.

    참조
    페이지
    7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0
      7 7 7 2 2 2 2 4 4 4 0 0 0 0 0 0 0 7 7
        0 0 0 0 3 3 3 2 2 2 2 2 1 1 1 1 1 0
          1 1 1 1 0 0 0 3 3 3 3 3 2 2 2 2 2
    페이지
    부재
    1 2 3 4   5 6 7 8 9 10     11 12     13 14

    8. 자료형 & 변수명 규칙 ★★★

    교재 단원: 프로그래밍 언어 활용

    정보처리기사 필기 (2020.06.06 ~ 2020.09.22) 의 3번의 시험 중 100% 출제되었습니다.

     

    C, C++, JAVA와 같은 프로그래밍 언어에서 변수를 선언할 때는 데이터 타입과 변수명 규칙을 고려해서 잘 선언해야합니다.

    [ C 언어 자료형 ]

    [ JAVA 언어 자료형 ]

    [그림 출처] https://domaindeveloper.tistory.com/15

     

    예를 들어, 2.3 이나 3.567 과 같이소수점이 있는 실수를 표현하고 싶다면 float, 더 큰 실수를 표현하고 싶다면 double 이 됩니다. (float은 소수점인 . 이 떠다닌다는 뜻의 둥둥 떠다디는 float 으로 이름이 붙여졌습니다. double은 소수점으로 표현하는 게 두 배로 정확하다 해서 double입니다. 더 긴 자리를 표현할 수 있습니다.) 그러나 소수점 없는 -2, 0, 1, 2 이런 정수들을 표현하고 싶다면 int 가 됩니다. (integer = 정수의 줄임말입니다.) 더 작은 정수를 저장하려면 short, 더 큰 정수를 저장하고 싶다면 long 이 됩니다. (이름 그대로입니다) 'A', 'B' 같은 문자를 저장하고 싶을 때는 char 로 선언합니다. (character = 글자, 부호라는 뜻이 있습니다)

     

    기본적으로는 다 음수와 양수를 다 표현할 수 있습니다. int는 -1 도 되고 1도 됩니다. 그런데 이런 자료형들의 앞에 unsigned를 붙인다면 무조건 양수만 표현합니다. (un + signed = 부호가 없다는 뜻입니다)

     

    자료형 표에는 보통 표시가 되지 않지만, 정수, 문자, 실수 등을 조합해서 하나의 자료형을 만들 수도 있습니다. 이를 struct (구조체) 라고 부릅니다. 자료형들을 조합해서 만들면 이런 형태가 됩니다.

    struct 내_구조체{
    	char name[10]; // 내 이름
     	int age; // 내 나이
     	double height; // 내 키
    }

     

    여기까지 보면 자료형의 이름들은 어느 정도 파악이 되셨을 것 같습니다. 문제에서 자료형의 종류와 이름을 매칭하는 것을 묻기도 하지만, 때때로 메모리 크기 몇 Byte를 차지하는지 아는지를 묻는 문제가 출제됩니다. (표만 봐도 너무 외우기 싫은 문제일 것입니다...) 

     

    중요한 것만 골라 보기 위해 C와 JAVA가 같은 점과 다른 점을 짚어드리겠습니다. 이 부분을 문제로 출제한다면 대부분 다른 점에 집중하여 출제하게 됩니다. 정수 자료형인 int 는 둘 다 똑같이 4 byte 입니다. 짧은 정수형은 2 byte로 역시 같습니다. 그런데!! long 자료형이 JAVA에서는 8 byte인데, C에서는 4 byte입니다. 더 큰 정수를 저장하기 위한 long인데 C에서 크기가 int와 같은 것이 이상합니다. (운영체제에 따라 원하면 long 크기를 늘릴 수가 있습니다. 그러나 교재에서는 굉장히 일반적이고 많이 쓰는 것을 기준으로 하기 때문에 대부분 C언어로 작성되면 long 크기가 4 byte가 된다고 보시면 됩니다. 참고: https://smallpants.tistory.com/10) 이 차이에 집중하시면 됩니다. long 자료형은 JAVA에서는 8 byte이지만, C에서는 4 byte입니다.

     

    또한 문자를 저장하는 character 타입이 C에서는 1 Byte이지만, JAVA에서는 2 Byte입니다. (왜 JAVA는 더 크게 잡았을까? 가 궁금하시다면, C는 예전에 나온 프로그래밍 언어라 영어 알파벳, 숫자 0~9 같은 것만 문자로 표현하면 되었습니다. ASCII 코드 문자 체계로 다 표현이 가능하였습니다. 그러나 점차 영어 말고도 한글, 한자 처럼 더 많은 글자를 표현해야할 필요가 생기면서 JAVA에서는 2 byte로 늘려서 유니코드를 지원하게 된 것입니다.)

     

    그 외 float 4 byte, double 8 byte 는 C와 JAVA가 모두 동일합니다.

     

    ※ Python은 변수를 미리 선언할 필요조차 없습니다. 데이터 타입도 알아서 정해주고, 변수도 저희가 쓰는 순간 알아서 만들어주기 때문에 주로 C/C++, JAVA에서 이런 문제들이 출제될 것입니다.

     

    그러면 여기까지 보고 잠깐 문제를 풀어보겠습니다.

    62. Java 프로그래밍 언어의 정수 데이터 타입 중 'long' 의 크기는?

    (1) 1 byte
    (2) 2 byte
    (3) 4 byte
    (4) 8 byte

    (2020.09.26 정보처리기사 필기 기출문제 - 출처: 전자문제집 CBT)

    C와 JAVA 모두 정수 자료형인 int는 4 byte이고, 더 작은 정수를 표현할 때는 short 2 byte 였습니다. 더 큰 정수를 표현하기 위한 long이 JAVA는 8 byte, C에서는 '대개' 4 byte입니다. 출제자는 아마 C 언어를 기준으로 외우신 분들이 헷갈리도록 하고 싶었던 것 같습니다. 답은 4번입니다.

     

    변수의 자료형을 알았으니 이제 변수를 선언할 수 있을 것입니다. 그러나 변수 이름을 아무렇게나 막 지을 수가 없습니다. 변수명 짓는 규칙을 알아보겠습니다.

     

    C/C++, JAVA, Python 이 변수명 규칙이 크게 다르지 않습니다.

    [변수 명영 규칙]
    1. 영문 대/소문자 (A~Z, a~z), 숫자 (0~9), _ (언더스코어) 로 구성합니다.
    2. 변수의 이름은 숫자 (0~9) 로는 시작할 수 없습니다. (첫 시작은 1. 에 있는 영문자나 _ 언더스코어는 가능합니다.)
    3. 변수의 이름 사이에는 공백이 들어갈 수 없습니다.
    4. 프로그래밍 언어에서 미리 정의된 키워드 (예약어) 는 사용할 수 없습니다.

    ※ JAVA는  _ 외에 $도 허용한다는 신기한 특징이 있습니다.
    ※ 4. 에서 말하는 예약어는 if, for, while, continue, true, false 처럼 프로그래밍 언어에서 특수한 역할을 하는 명칭들을 말합니다.

    변수 이름 짓기 규칙을 잘 보셨나요? 문제를 풀면서 잘못된 점을 찾아보겠습니다.

    75. C언어에서 사용할 수 없는 변수명은?

    (1) student2019
    (2) text-color
    (3) _korea
    (4) amount

    (2020.06.06 정보처리기사 필기 기출문제 - 출처: 전자문제집 CBT)

    답은 2번입니다. 나머지는 다 영문자, _, 숫자를 이용하여 이름을 잘 지었는데 2번은 사용하면 안 되는 - 가 들어가 있네요.

     

    다른 방식으로 출제된 문제도 한 번 풀어보겠습니다.

    76. 파이썬의 변수 작성 규칙 설명으로 옳지 않은 것은?

    (1) 첫 자리에 숫자를 사용할 수 없다.
    (2) 영문 대문자/소문자, 숫자, 밑줄(_) 의 사용이 가능하다.
    (3) 변수 이름의 중간에 공백을 사용할 수 있다.
    (4) 이미 사용되고 있는 예약어는 사용할 수 없다.

    (2020.08.22 정보처리기사 필기 기출문제 - 출처: 전자문제집 CBT)

    답은 3번입니다. 변수 이름 사이에 공백이라니! 그런 건 허용되지 않습니다. 나머지는 위에서 본 규칙과 동일합니다.

     

    ※ 자료형 앞에 static 이 추가로 붙은 경우가 있는데 이건 뭔가요? 할 수 있습니다. 대부분 변수들은 중괄호 { } 범위 안에서만 사용하고 실행이 다 되고 중괄호를 벗어나게 되면 변수는 사라집니다. 하지만 static 키워드를 사용하면 정적 변수가 되어 실행하던 코드 부분이 끝나도 사라지지 않습니다. (기억 부류 자료형 중에 하나입니다) 여기서 중요한 것은 프로그램이 처음 실행될 때 static 변수들은 0으로 초기화 시켜주는 과정이 있다는 것입니다. 이러한 특성을 아는지 물어보고자 출제된 기출 문제가 있었습니다.

    78. C언어에서 배열 b[5] 의 값은?

    static int b[9] = {1,2,3};

    (1) 0
    (2) 1
    (3) 2
    (4) 3

    (2020.06.06 정보처리기사 필기 기출문제 - 출처: 전자문제집 CBT)

    답은 깔끔하게 1번입니다. static 으로 선언이 되면 빈 공간은 0으로 초기화가 됩니다. (배열 9칸은 1, 2, 3, 0, 0, 0, 0, 0, 0 으로 만들어졌을 것입니다) 만약 저게 static이 아니었다면 답은 (5) 쓰레기 값이나 임의의 값 이었을 것입니다.


    9. 접근 제한자 ★★

    교재 단원: 프로그래밍 언어 활용

    정보처리기사 필기 (2020.06.06 ~ 2020.09.22) 의 3번의 시험 중 2번 출제되었습니다.

     

    정보처리기사 1과목에 나오는 캡슐화나 정보 은닉의 개념을 기억하고 계신가요? Class를 통해 캡슐화할 수도 있고, 공개를 원치 않는 정보들은 은닉할 수도 있었습니다. 클래스 안의 멤버들에게 접근을 어느 수준으로 허용할 것인지를 접근 제한자를 통해 정해줄 수가 있습니다.

     

    JAVA 언어의 접근 제한자는 public, protected, default, private가 있습니다.

    [Java 언어 접근 제한자]
    1. public: 모든 접근을 허용합니다.
    2. protected: 같은 패키지 또는 자식 클래스에서 사용할 수 있습니다. (일부만 허용됩니다.)
    3. default: 같은 패키지에 속한 클래스에서만 사용할 수 있습니다. (이것 또한 일부만 허용됩니다.)
    4. private: 외부에서 사용할 수 없습니다. (아예 접근을 허용하지 않습니다.)

    위와 같이 public은 모두 접근 가능, private은 아무도 접근 불가, default나 protected는 일부만 접근 가능입니다. (설명에 나오는 패키지는 Java에서 나오는 개념으로 클래스들을 감싸고 있는 패키지라는 개념이 있습니다.)

     

    + 시험에 출제된 적은 없지만 C++ 언어의 접근 제한자는 더 적은 public, protected, private 입니다.

     

    크게 어렵지 않으실 것 같습니다. 문제를 풀어보면 다음과 같습니다.

    80. JAVA 언어에서 접근제한자가 아닌 것은?

    (1) public
    (2) protected
    (3) package
    (4) private

    (2020.06.06 정보처리기사 필기 기출문제 - 출처: 전자문제집 CBT)

    답은 3번입니다. public, protected, default, private이 Java 언어의 접근 제한자입니다. package는 본 개념을 지나가듯 대충 보았을 때 헷갈릴 수 있도록 넣어본 것 같습니다.


    10. 프로그램 실행 결과 ★★

    교재 단원: 프로그래밍 언어 활용

    정보처리기사 필기 (2020.06.06 ~ 2020.09.22) 의 3번의 시험 중 2번 출제되었습니다.

     

    프로그래밍을 실제로 해본 적이 없다면 프로그램 실행 과정을 따라가는 것이 어려울 수 있을 것 같은데요. 기출 문제를 기반으로 연습해보겠습니다.

     

    (1) C 나 Java 프로그램 실행 결과 맞추기

    78. 다음 C 프로그램의 결과 값은?

    int main (void) {
        int i;
        int sum = 0;
        for (i = 1; i <= 10; i=i+2)
            sum = sum+i;
        printf("%d", sum);
    }

    (1) 15
    (2) 19
    (3) 25
    (4) 27

    (2020.08.22 정보처리기사 필기 기출문제 - 출처: 전자문제집 CBT)

    선언된 변수를 보면 i와 sum 이 있습니다. i는 for문에서 사용할 예정이라 딱히 값을 정해주지 않았네요. sum 은 처음에 값이 0으로 초기화가 되었습니다.

     

    int main (void) {
        int i;
        int sum = 0;
        for (i = 1; i <= 10; i=i+2)
            sum = sum+i;
        printf("%d", sum);
    }

     

    그 다음에 for 문이 보입니다. for문은 (시작; 종료 조건; 종료전까지 할 거) 로 이루어져있습니다. 보면 시작은 i = 1로 하게 되고, i 가 10보다 작거나 같게 되면 그 즉시 종료해야하고, 종료 전까지는 i 에 2를 더해갑니다.

     

    int main (void) {
        int i;
        int sum = 0;
        for (i = 1; i <= 10; i=i+2)
            sum = sum+i;
        printf("%d", sum);
    }

     

    for 문 아래를 중괄호로 표현하지 않고 들여쓰기로 표현하였네요, 한 줄의 경우는 이렇게 들여쓰기로 쓸 수도 있습니다. 그러면 아래 한 문장까지 포함하여 해석하면 i 는 1부터 시작해서 10이 될 때까지 2씩 커지면서 (for문) sum 에다가 i 값을 더해라 (for문 아래)가 될 것입니다. sum 은 처음에 0 이었으니, 0에다가 1, 3, 5, 7, 9를 더하게 될 것입니다. 2를 더해서 i가 11이 된 순간 그 즉시 for 문은 종료되고, 중괄호 {} 나 들여쓰기된 문장 밑으로 진행하게 됩니다.

     

    int main (void) {
        int i;
        int sum = 0;
        for (i = 1; i <= 10; i=i+2)
            sum = sum+i;
        printf("%d", sum);
    }

     

    가장 밑에 오면 printf 문이 있네요. 대부분의 문제가 %d로 되어있는데 정수의 숫자 형태로 출력하라는 뜻입니다. sum 을 정수 형태로 출력하면 답은 3번입니다. 1+3+5+7+9 = 25

     

    int main (void) {
        int i;
        int sum = 0;
        for (i = 1; i <= 10; i=i+2)
            sum = sum+i;
        printf("%d", sum);
    }

     

    ※ for 문이 아닌 while 문이 나올 수도 있는데요. 만약 i가 10보다 작거나 같은 동안만 반복 실행하고 싶다면 while( i <= 10) 이 되었을 것입니다. for 문과 달리 시작 상태나 종료 전까지 할 거를 정해주지 않을 뿐 종료 조건 만족할 때까지 반복하는 것은 똑같습니다.

     

    ※ 위 예시에서는 if 가 없는데, if 조건문은 조건이 참인 경우에만 아래 중괄호 {} 나 한 줄 들여쓰기된 문장을 실행합니다. 예를 들면 다음과 같습니다.

    if ( my_money > 10000)

        printf("%s", "난 부자다");

    else

        printf("%s", 난 거지다");

    라고 프로그램을 작성했다면, my_money가 1000000000 이라면, if 문 안에 조건이 참이 되기 때문에 "난 부자다"라는 글자가 출력이 될 것입니다.

     

    (2) Python 프로그램 실행 결과 맞추기

    기출문제를 보면 Python 실행 결과는 슬라이싱 개념을 묻는 문제가 2번이나 출제가 되었습니다.

    슬라이스는 이름 그대로 조각을 잘라내는 것입니다. 변수[시작 : 끝 : 몇 씩 건너뛸 건지] 형태로 사용이 됩니다.

    예를 들어, 아래 기출문제를 풀면 다음과 같습니다.

    68. 다음 파이썬으로 구현된 프로그램의 실행 결과로 옳은 것은?

    >>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
    >>> a[ : 7 : 2]

    (1) [20, 60]
    (2) [60, 20]
    (3) [0, 20, 40, 60]
    (4) [10, 30, 50, 70]

    (2020.09.26 정보처리기사 필기 기출문제 - 출처: 전자 문제집 CBT)

    a[ : 7 : 2] 가 보입니다. 맨 앞에 아무것도 없다는 것은 맨 처음을 의미합니다. (중간에 아무것도 없으면 맨 끝까지 다 포함이라는 뜻입니다.) 그 다음은 잘라낼 끝을 의미하며 7로 되어있는데요. 파이썬 슬라이싱에서 조심해야할 것은 7 직전 까지만 잘라낸다는 것입니다. 위에 a를 0, 1, 2, 3... 해보면 7 번째 숫자는 70 에 해당합니다. 일단 대상은 처음인 0 부터 60 까지라는 것을 알 수 있습니다. 이제 숫자인, 마지막 몇 번씩 건너뛸 건지를 적용하면 2씩 건너뛰니까 0, 하나둘 뛰고 20, 하나둘 뛰고 40, 하나둘 뛰고 60 이 됩니다. 답은 3번입니다. (마지막 건너뛰는 부분이 생략되면 그냥 한 칸씩 뛴다는 이야기입니다 ex. a[0:7])

     

    슬라이싱을 연습할 수 있는 다른 기출문제로 풀어보겠습니다.

    75. 다음은 사용자로부터 입력받은 문자열에서 처음과 끝의 3글자를 추출한 후 합쳐서 출력하는 파이썬 코드에서 (ㄱ) 에 들어갈 내용은?

    String = input("7문자 이상 문자열을 입력하시오.")
    m = (     (ㄱ)      )
    print(m)


    < 보기 >
    입력값: Hello World
    최종 출력: Helrld

    (1) string[1:3] + string[-3:]
    (2) string[:3] + string[-3:-1]
    (3) string[0:3] + string[-3:]
    (4) string[0:] + string[:-1]

    (2020.08.22 정보처리기사 필기 기출문제 - 출처: 전자문제집 CBT)

    문제가 조금 까다롭지는 않으셨나요? 답은 3번입니다. 앞에 3글자를 잘라 Hel 을 만들기 위해서 앞은 string[0:3] 혹은 string[:3] 이 되어야합니다. (Hello 에서 0, 1, 2, 3번째 글자는 바로 l입니다)

    그리고 뒤에 3글자를 자르려면 string[8:] 을 생각하셨을텐데요. 이것도 맞지만 슬라이싱의 추가적인 문법이 등장했습니다. -1은 맨 뒤글자를 의미합니다. 위에 예시에서 World의 d를 의미합니다. -2, -3 .. 로 가면 맨 뒤에서 하나씩 앞으로 오는 것입니다. 그런데 주의해야할 점은 슬라이싱에서 두번째에 쓰는 끝 위치는 슬라이스에 포함이 되지 않는다는 것입니다. 예를 들어, string[:-1] 을 해버리면 맨 마지막 글자 -1 위치에 있는 거는 포함이 안 되고 그 앞까지만 잘려버리게 됩니다. d를 포함하기 위해서는 string[-3:] 을 해야 뒤에서 3번째 글자인 r부터 끝까지 자르겠다라는 의미가 될 것입니다. 이렇게 두 번 슬라이싱을 해 준 후 두 글자를 합하기 위해 파이썬 문법대로 + 로 합친 것입니다.


    보너스. 교착 상태

    교재 단원: 응용 SW 기초기술 활용

    정보처리기사 필기 (2020.06.06 ~ 2020.09.22) 의 3번의 시험 중 1번 출제되었습니다.

     

    정보처리기사 4과목이 다양한 개념을 골고루 내기 때문에 학습이 상당히 까다롭습니다. 그래서 이번에도 보너스 개념을 2개를 추가해보았습니다. 기출 문제 중에서는 1회 출제되었지만 (정확히는 한 회차 시험에 2개 문제가 출제되었습니다) 추후에 출제될 가능성이 높은 개념이라 선택하였습니다.

     

    위에서 운영체제의 스케줄링에 대해 잠깐 보셨을 것입니다. 프로세스들에게 자원을 할당해주는데, 완벽한 스케줄링이 항상 되는 것은 아닐 것입니다. 때때로 두 개 이상의 프로세스들이 서로가 서로에게 필요한 자원들을 점유하고 상대방이 자원을 넘겨줄 때까지 무한정 기다리는 것이 교착 상태입니다. (영화에서 악당과 주인공이 서로 먼저 총 내려놔, 니가 먼저 내려놔 같은 느낌이죠...)

     

    이러한 교착 상태의 발생 조건은 4가지가 있습니다.

    [ 교착 상태의 발생 조건 ] 
    - 상호 배제 (Mutual Exclusion): 한 번에 한 개의 프로세스만이 공유 자원을 사용할 수 있어야합니다.
    - 점유와 대기 (Hold and Wait): 프로세스가 자원을 할당받은 후 다른 프로세스에 할당된 자원을 기다리는 것입니다.
    - 비선점 (Non-Preemption): 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없습니다.
    - 환형 대기 (Circular Wait): 이미 자원을 가진 프로세스가 앞이나 뒤의 프로세스의 자원을 요구합니다.

    이런 조건을 만족하게 되면 교착 상태가 발생할 수 있습니다. 공유 자원을 한 번에 한 개의 프로세스만 사용할 수 있는 상태인데, 한 프로세스가 그 자원을 갖고도 다른 자원의 할당을 또 요구하는 것입니다. 그런데 강제로 빼앗아 중재를 할 수도 없습니다. 이런 조건들 때문에 이러지도 저러지도 못한 교착 상태에 빠지는 것입니다.

     

    문제를 풀면서 어떤 식으로 외워야할지 감을 잡아보겠습니다.

    67. 교착 상태 발생의 필요 충분 조건이 아닌 것은?

    (1) 상호 배제 (Mutual Exclusion)
    (2) 점유와 대기 (Hold and Wait)
    (3) 환형 대기 (Circular Wait)
    (4) 선점 (Preemption) 

    (2020.06.06 정보처리기사 필기 기출문제 - 출처: 전자문제집 CBT)

    굉장히 헷갈리게 잘 출제를 했죠? 답은 4번입니다. 교착 상태 발생 조건은 상호 배제, 점유와 대기, 환형 대기, 비선점입니다. 비선점을 선점으로 바꿔놓은 4번이 답입니다. 추후 이런 식으로 문제를 낸다면 조금씩 말을 바꿔서 함정을 넣을 수 있다는 걸 염두에 두고 보시면 될 것입니다.

     

    교착상태가 되었으면 이를 해결해야할 것입니다. 해결 방법은 다음과 같습니다.

    [ 교착 상태 해결 방법 ]
    - 예방 (Prevention): 교착 상태 원인 중 하나를 제거합니다. (상호 배제, 점유와 대기, 환경 대기, 비선점 중 하나를 제거)
    - 회피 (Avoidance): 교착 상태가 발생하려고 할 때 그 가능성을 피해가는 방법입니다. ex. 은행가 알고리즘이 있습니다.
    - 회복 (Recovery): 교착 상태를 일으킨 프로세스를 종료하거나, 교착 상태의 프로세스가 점유한 자원을 선점해서 다른 프로세스에 할당하는 기법입니다. (쉽게 이해하려면 문제를 해결하기 위해 종료시켜버리는 것입니다)

    해결하는 것은 예방을 할 수도 있고, 문제를 회피해갈 수도 있고, 이미 발생한 것을 뒤처리를 해서 다시 회복시킬 수도 있습니다. 여기까지 보고 문제를 풀어보겠습니다.

    65. 은행가 알고리즘 (Banker's Algorithm) 은 교착 상태의 해결 방법은 어떤 기법에 해당하는가?

    (1) Avoidance
    (2) Detection
    (3) Prevention
    (4) Recovery

    (2020.06.06 정보처리기사 필기 기출문제 - 출처: 전자문제집 CBT)

    답은 1번입니다. 회피 방법의 대표적인 사례가 바로 은행가 알고리즘입니다. 은행가 알고리즘은 은행에서 돈을 빌려주는데, 남은 돈이 넉넉하지 않으면 빌려주지 않는 것입니다. 프로세스에게 자원을 할당하는데, 남은 자원이 넉넉하지 않으면 할당해주지 않습니다. 그러면 프로세스들끼리 자원을 잘못 나눠갖고 니가 먼저 내놔 니가 먼저 내놔하는 일은 없을 것입니다. (필요하면 은행원에게 와서 남는 자원을 받아가면 되기 때문에요)

     

    예방과 회피가 헷갈리실 수도 있을 것 같습니다. 예방은 원인을 아예 찾아서 뿌리뽑는 것인데 반해, 이 은행가 알고리즘은 문제의 원인이 없어진 것은 아니고 문제가 생길 것 같으면 아예 자원 할당을 회피해버리는 방법입니다. 사실 자원 할당을 적절히 해줘야 프로세스들이 제대로 동작할텐데, 이런 식으로 회피만 교묘히 하다보면 결국 어딘가에서 문제가 터질 수도 있겠죠?


    보너스. 기억장치 배치 전략

    교재 단원: 응용 SW 기초기술 활용

    정보처리기사 필기 (2020.06.06 ~ 2020.09.22) 의 3번의 시험 중 1번 출제되었습니다.

     

    본 개념 또한 시험에서 많이 출제된 개념은 아니지만 추후 출제 가능성인 높아 보여 보너스 개념으로 추가하였습니다.

     

    기억장치 배치 (Placement) 전략은 새로 반입되는 프로그램이나 데이터를 주기억장치의 어디에 위치시킬 것인지를 결정하는 전략입니다. 전략의 종류에는 최초 적합 (First Fit), 최적 적합 (Best Fit), 최악 적합 (Worst Fit) 이 있습니다.

     

    기억장치의 상태가 다음과 같을 때 새로 들어온 프로그램 10 K를 각각 최초 적합, 최적 적합, 최악 적합으로 배치해보겠습니다.

    영역 번호 영역 크기 상태
    1 5 K 공백
    2 14 K 공백
    3 10 K 사용 중
    4 12 K 공백
    5 16 K 공백

    1. 최초 적합 (First Fit): 빈 영역 중 들어갈 수 있는 크기이면서 가장 첫 번째 분할 영역에 배치합니다. 10 K 프로그램이 들어갈 수 있는 가장 첫번째 영역은 2번입니다.

    2. 최적 적합 (Best Fit): 빈 영역 중 들어갈 수 있는 크기이면서 가장 딱 맞는 영역 (단편화를 가장 작게 남긴다고도 표현합니다) 에 배치합니다. 10 K 프로그램이 가장 딱 맞는 위치는 3이지만 사용 중이기 때문에 그 다음으로 제일 빈 공간을 덜 남기는 4번에 들어가게 됩니다.

    3. 최악 적합 (Worst Fit): 빈 영역 중 들어갈 수 있는 크기인데 가장 빈 공간을 많이 남기는 곳에 (단편화를 가장 많이 남긴다고도 표현합니다) 배치합니다. 10 K가 들어가는데 가장 빈 공간이 많이 남는 곳은 5번입니다. (낭비가 심하기 때문에 최악 적합이다라고 암기하시면 될 것 같습니다.)

     

    크게 어렵지 않으셨을 것 같습니다. 문제를 풀어보겠습니다.

    73. 메모리 관리 기법 중 Worst Fit 방법을 사용할 경우 10 K 크기의 프로그램 실행을 위해서는 어느 부분에 할당되는가?

    (1) NO.2
    (2) NO.3
    (3) NO.4
    (4) NO.5

    (2020.08.22 정보처리기사 필기 기출문제 - 출처: 전자문제집 CBT)

    Worst Fit 방식이면 빈 공간이 가장 많이 남는 것이죠. 10 K 가 들어갈 수 있으면서 빈 공간이 가장 많이 남는 것은 5번이므로, 답은 4번이 됩니다.


    참고

    정보처리기사 필기 전자문제집 CBT: https://www.comcbt.com/xe/iz

     

     

    댓글

Designed by Tistory.