패스트캠퍼스

[패스트캠퍼스 수강 후기] 올인원 패키지 : 컴퓨터 공학 전공 필수👉C언어인강 100% 환급 챌린지 29회차 미션

돌맹이시터 2020. 11. 16. 18:52

 

 

환급미션 29일째..

 

Part2 시작

 

 

 

 

운영체제 - Intro 01. 운영체제 오리엔테이션

 

marp라는 프로그램을 이용해서 강의가 진행될 예정

미리 만들어 둔 교안이 아니라

강의 중에 타이핑과, 그림을 통해 수업이 진행될 예정이라고 하며,

핵심이론, 용어에 집중해 감을 잡는 것에 중점을 두는 것이 좋다고 한다.

 

IT에 대해 처음 접하는 사람도 따라올 수 있도록 강의를 구성할 예정이라고 한다.

처음 배우는 사람을 위해 용어를 가볍게 짚고 넘어간다고 하는데

용어 뿐 아니라 전체적인 내용을 기본부터 짚고 넘어갈 수 있도록 진행될 예정이라고 한다.

 

전반적으로 수업이 어떤 방식으로 진행될지에 대한 말 그대로 오리엔테이션이 진행되었다.

 

아무래도 강사분이 비전공 출신이다 보니,

IT 분야로 입문을 원하는 비전공자들의 마음을 잘 알고 그에 맞는 수업방식을 선택한 것 같아서 좋았다.

 

 

마지막으로 운영체제 과목에 대해 소개를 했다.

컴퓨터 사이언스(전공) 필수 과목

소프트웨어+하드웨어 scratch

자료구조, 알고리즘 - 큐, 스택 

 

 

=> 핵심 이론과 용어에 집중해서 감을 잡고, 전공자 수준으로 넘어서는 관문

 

 

 

 

운영체제 intro - 01. 운영체제 큰 그림

운영체제 intro - 02. 운영체제 큰 그림과 응용프로그램

 

 

 

- 운영체제 역할 1 : 시스템 자원 (system resource) 관리자 - (*시스템 자원 == 컴퓨터 하드웨어)

•cpu - 각 프로그램이 얼마나 cpu를 사용할지 결정

•memory - 각 프로그램이 어느 주소에 저장될지, 어느 정도의 메모리 공간을 확보해야 할지

•I/O device(모니터, 마우스, 키보드, 통신장치 등) - 어떤 식으로 사용/출력될지

•저장매체(SSD,HDD) - 어디에, 어떻게 저장할지 

 

 

- 대표적인 운영체제

 

Windows OS, Mac OS, UNIX

UNIX 계열 OS : 유닉스와 사용법이나 OS 구조가 유사

LINUX OS : 프로그래머, 전공자 , 특히 서버 작업을 하는 환경에서 많이 사용됨

 

 

 

- 운영체제 역할 2 : 사용자/컴퓨터 간의 커뮤니케이션 지원

 

출처 강의자료

 

 

 

 

- 운영체제 역할 3 : 컴퓨터 하드웨어와 프로그램을 제어

 

출처 강의자료

 

OS의 역할을 직관적으로 보여준다.

Shell 이라는 별도의 소프트웨어도 이런 역할을 지원한다고 한다.

 

 

 

 

- 응용 프로그램이란?

 

프로그램 = 소프트웨어

소프트웨어 = 운영체제, 응용 프로그램

응용 프로그램 = Application (App)

 

 

 

- 운영체제와 응용 프로그램의 관계

 

운영체제가 응용 프로그램을 관리

•응용 프로그램간의 권한을 관리 (ex:관리자 권한으로 실행)

•응용 프로그램을 사용하는 사용자도 관리 (ex:로그인)

 

응용 프로그램은 누구나 만들 수 있다.

•응용 프로그램에 무한 반복문을 넣었다. - os가 관리

•잘못 작성해서 프로그램이 다운 - os가 관리

•모든 파일 삭제 막기 (권한/사용자 관리)

•응용프로그램이 cpu를 모두 사용하려고 한다 - os가 관리

 

 

 

=> 운영체제의 목표 :

응용 프로그램이 효율적으로 동작하도록 지원, 응용 프로그램이 요청하는 시스템 리소스를 효율적으로 분배/지원

 

 

컴퓨터를 켜면 운영체제는 memory에 올라가게 된다. (참고:폰노이만 구조)

 

 

 

 

 

 

 

소프트웨어 베이직 - c언어의 기초 - 18. 전처리기

 

전처리기 구문은 다른 프로그램 영역과 독립적으로 처리됨, 소스코드 파일 단위로 효력

 

 

 

- 파일 포함 전처리기

 

#include는 전처리기에서 가장 많이 사용되는 문법

특정한 파일을 라이브러리로서 포함시키기 위해 사용

가져올 수 있는 파일에 제약없음

 

#include <파일이름>

위와 같이 선언하면 시스템 디렉토리에서 파일 검색

운영체제마다 시스템 디렉토리가 존재하는 경로가 다를 수 잇다

대표적으로 stdio.h와 같은 헤더파일 등이 시스템 디렉토리에 존재한다.

 

#include "파일이름"

위와 같이 선언하면 현재 폴더에서 파일을 먼저 검색

현재 폴더에 파일이 없다면 시스템 디렉토리에서 파일 검색

 

 

 

- 헤더파일 작성하기

 

1. 예제로 하나의 함수를 작성해서 헤더파일로 저장해본다.

--------------

 int add(int a, int b)

 {

return a+b;

}

-----------------

-> temp.h

 

 

2. main.c에서 #include "temp.h"를 불러와본다.

----------------

#include <stdio.h>

#include "temp.h"

 

int main(void)

{

printf("%d\n", add(3,7));

system("pause");

return 0;

}

---------------

-> 10이 출력된다.

 

 

 

 

 

- 매크로 전처리기

 

프로그램 내에서 사용되는 상수, 함수를 매크로 형태로 저장하기 위해 사용

#define 문법을 사용해 정의할 수 있다.

 

------------

#include <stdio.h>

#define PI 3.1415926535

 

int main(void)

{
int r=10;

printf("원의 둘레: %.2f\n", 2 * PI * r);

system("pause");

return 0;

}

-----------------

-> 상수인 PI값을 인식해서 반지름 10인 원의 둘레 값이 출력된다.

 

 

 

 

* 인자를 가지는 매크로 전처리기 

 

#define 문법에 인자가 포함될 수 있다.

 

----------------

#include <stdio.h>

#define POW(x) (x*x) //인자 x를 받아서 x의 제곱을 반환

 

int main(void)

{

int x=10;

printf("x의 제곱: %d\n", POW(x));

system("pause");

return 0;

}

-----------------

-> x의 제곱 출력됨

=> 자주 쓰는 것들은 함수 형태로 미리 define을 이용해 간단히 정의할 수 있다.

=> 소스코드의 양을 획기적으로 줄일 수 있다.

 

 

-------------

#include <stdio.h>

#define ll long long

#define ld long double

 

int main(void)

{

ll a = 9847298571;

ld b = 100.5423;

printf("%.1f\n", a*b);

system("pause");

return 0;

}

---------------

 

 

 

 

 

 

- 조건부 컴파일 ( ex. #ifndef ~ #endif ) 

 

 

컴파일이 이루어지는 영역을 지정하는 기법

다양한 디버깅처리를 할 때나, 소스코드 이식성을 높이고자 할 때 작성됨

c언어로 시스템 프로그램을 작성할 때는 운영체제에 따라서 소스코드가 달라질 수 있다.

운영체제에 따라서 컴파일이 수행되는 소스코드를 다르게 할 수 있다.

 

 

#ifndef (if not define) ~ #endif 문법은 대표적인 조건부 컴파일 문법이다.

흔히 헤더파일의 내용이 중복되어 사용되지 않도록 하기 위해 적용

-> 특정한 define, 즉 매크로가 정의되고 있지 않다면 어떤 부분을 정의하겠다! 라는 내용의 문법

 

-----------------------

#include <stdio.h>

#include "temp.h"

#include "temp.h"

------------------------

이런 식으로

실수로 temp.h를 여러 번 불러왔을 때 오류가 발생하게 되는데,

이런 실수를 하더라도 한 번만 불러올 수 있도록 처리를 하는 데 사용할 수 있다.

 

아까 작성해두었던 헤더파일인 temp.h 로 돌아가서

--------------

#ifndef _TEMP_H_ 

#define _TEMP_H_

 

 int add(int a, int b)

 {

return a+b;

}

 

#endif

-----------------

-> ifndef 구문에 의해 단 한 번만 컴파일 될 수 있도록 처리가 되는 것이다.

 

 

 

 

 

- 파일 분할 컴파일

 

 

자신이 직접 라이브러리를 만들고자 할 때 많이 사용되는 문법

일반적으로 직접 라이브러리를 만들 때 c언어 파일, 헤더파일을 모두 작성해야 한다.

 

 

 

헤더파일, c언어 문법을 나누어서 정의하는 것을 보여준다. 

 

temp.h 헤더파일에 add함수의 형태를 정의하고,

temp.c (헤더파일과 동일한 이름)으로 소스코드를 만들어서 함수의 원형을 정의하도록 한다.

-> 헤더파일과 c언어파일이 완전히 분리가 되기 때문에 깔끔하게 파일을 분할해서 전체 프로젝트를 구성할 수 있게 된다.

 

 

 

 

 

올인원 패키지 : 컴퓨터 공학 전공 필수👉https://bit.ly/3i4sCVE