ABOUT ME

-

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

$ Linux Kernel
Power Management DVFS
  • 운영체제
    SW개발/TIL 2019. 3. 26. 16:54

    03/26


    운영체제


    운영체제는 하드웨어가 있으면 그 바로 위에 올라가는게 운영체제이다. 하드웨어가 CPU도 있고 비디오 카드도 있고, 네트워크 카드도 있고, 입출력 장치도 키보드가 연결이 되어있고, 하드디스크도 연결이 되어있고, 네트웍은 네트워크와 연결되어있고.




    어플리케이션이 있다고 했을 때 하드웨어와 어플리케이션 사이 중간 역할을 한다. 

    우선 1. Resource 관리를 한다. 여기 들어가는 리소스가 뭐냐면, 

    - 하드디스크, (HDD) 이런 저장장치 (storage)관리 

    - I/O (입출력장치)

    - Device 외부 디바이스 장치들 관리

    - 또 하나 중요한 것은 메모리 관리


    또 오퍼레이팅 시스템이 하는 중요한 일 중에 하나가 

    2. 두 번째로 크게 봤을 때 스케줄링

    - Device에 대한 스케줄링 관리도 있고

    - Process 스케줄링. 프로세스는 어플리케이션에서 돌아가는 프로그램들. exe, dll 이런 것들이 돌아간다. 파이썬, 인터넷. 프로세스 할당해주고 그 프로세스들한테 cpu할당해준다. process 스케줄링이라는 것은 어플리케이션들한테 CPU 쓸 수 있는 시간을 할당해주는 것이다. 


    하드웨어 관리하면서 어플리케이션들과 통신할 수 있게, 동작할 수 있게 해주는 것이다. 우리가 쓰는 windows

    각 디바이스 하드웨어 업체들은 윈도우즈 같은 경우 얘기를 하면, 스마트폰에 올라가는 것도 운영체제 중 하나. 이런 식으로 프로그램을 짜라고 가이드라인을 준다. 그거에 맞춰서 하드웨어 업체들이 맞춘다.


    운영체제는 전세계 몇 개 없다. 그 회사들이 더 큰 회사다. 하드웨어들이 운영체제 버전에 맞춘다!! 이런 API가 만들어지게 만들라고 하면 하드웨어 업체들이 그거에 맞춰서 만들어지게 해서 제공한다. 


    윈도우즈는 System library 같은 걸 제공한다. 그러면 API의 인터페이스들. 이런 이런 함수를 짜라. 이런 가이드라인이 나온다. 하드웨어 입장에서 보면, 네트웍에 IO stream in 이라고 하면 이런 함수들 해서 네트워크 장비들에 데이터를 보낼게. 받는 건 iostreamout 이렇게 받을 게 하면 이런 걸 만들어와 하고 가이드라인을 준다. 네트워크 장비 만드는 데서는 이 함수 호출했을 때 이게 제대로 동작하게 만들어야 한다. 


    어플리케이션 입장에서도 iostreaminput, iostreamoutput을 주면 이렇게 나오게 하겠다고 인터페이스를 만들어둔 것이다. 운영체제의 시스템 라이브러리는 어플리케이션과 커뮤니케이션하는 창구가 되고, 아랫단에서는 하드웨어를 통제하고 커뮤니케이션하는 창구가 된다.


    프로세스한테 메모리 할당해주는 것에 스케줄링도 같이 들어간다. 크게 어떤 작업을 하는지만 보고 분류했을 때 이렇게 나눠볼 수 있는 것이다. 이런 요구들이 동시에 일어났을 때 CPU는 보통 하나밖에 없다. 그러면 하나의 CPU가 이런 많은 일을 해야하니까 어떤 장치에 대한 작업을 먼저 해줘야하는지 관리를 운영체제가 다 해준다. 보통 전공자들은 최소 한학기에서 두학기 배우는데, 운영체제에서 배우는 내용은 저장장치, IO디바이스, 프로세스 스케줄링.... 이것들을 각각 어떤 방식으로 하는지 알고리즘들을 배운다. 우선순위 큐가 이런 디바이스 스케줄링 할 때나 프로세스 스케줄링할 때 사용될 수 있는 방법인 것이다. 운영체제 공부 책을 사보면 이런 방법론, 알고리즘 이런 내용을 본다. 


    파일 시스템은 결과적으로는 하드디스크를 통제한다. 파일 시스템 이용을 해서 운영체제에서 하드디스크를 통제한다. 하드 디스크 제공하는 업체가 윈도우즈에서 가이드라인해주는 거에 맞춰서 제공을 하면 그거를 타고 파일 시스템에 이동을 해서, 윈도우즈 탐색기를 가지고 우리가 파일 관리도 하는데, 그 위의 어플리케이션에서 파일을 쓰고 하는 건 오퍼레이팅 시스템 안에서 동작을 하는 것이다.


    디비도 파일 시스템의 연장이다. 이거는 파일 시스템 위에 DBMS를 올리는 것이다. 데이터 베이스도 오퍼레이팅 시스템 위에 올라간다. 데이터 베이스 설치할 때 윈도우즈 드라이버를 설치해야한다. DB 드라이버 어떻게 만들어야하는지 다 만들어져 있고, 그거에 맞춰서 DBMS가 올라간다. DBMS 위에 DB application이 올라간다.


    우리가 배운 장고

    미들웨어 (요즘에는 그런 용어를 잘 안 쓰는데), 프레임웍에 해당되는 걸 만들고 거기에 상위 어플리케이션, 사용자가 필요로하는 어플리케이션을 짤 수 있게 제공하는 것이 장고이다.


    오퍼레이팅 시스템에 가까이 갈수록 c, 그거보다 위로 가면 java, 그거보다 파이썬이 위에 있다.


    c언어는 시스템 라이브러리와 직접 통신하게 짜서 바로 오퍼레이팅 시스템이랑 연결해서 동작하는데, 대신에 시스템 크리티컬한 문제를 만들 수 있다. 메모리도 직접 다 건드리고, 오퍼레이팅 시스템에서 하는 일들을 다 직접 건들 수가 있다. 잘못 만들면 시스템 먹통이 될 수 있다. 오퍼레이팅 시스템 버전 올라가면서 그런 문제 많이 막긴 했다. 그래도 먹통될 수 있다. 속도도 빠르고 시스템 직접 통제하니까 좋다. 


    윈도우즈 버전마다 이거 다 다시짜야한다? 윈도우즈용 c로 사용한거 다른 유닉스, 리눅스에서 못 쓴다. c로 짠 프로그램은 오퍼레이팅 시스템에 디펜던트하게 돌아간다. 똑같은 기능하게 짜도 운영체제 별로 짜야한다. 운영체제별로 API가 정확하게 일치하진 않는다.


    속도도 빠르고 그런 점은 있지만 이런 시스템 크리티컬한 문제를 만들수도 있고, 운영체제에 dependent하게 돌아가니까 개발하는 사람 입장에서는 같은 일을 반복해야하는 것이다.


    C는 그런 특성이 있고,

    자바는 (자바 개발자도 유닉스 회사 썬에 있었던 사람) 요즘에는 그냥 JRE라고 하는데, Java Runtime Environment가 있고, 그 위에서 자바 프로그램이 동작을 한다. 초창기에 나올 때는 java virtual machine이라고 했다. 왜 자바 버추얼 머신이라고 했냐면 자바는 시스템에 인디펜던트하게 돌아가게 하려고, 여기에다가 JRE를 올린다. 운영체제 시스템 라이브러리 위에 돌린다. 그리고 그 위에서 자바 프로그램이 동작을 한다. 자바 클래스가. 그래서 한 번 짠 거 가지고, 운영 체제가 바뀌어도 쓸 수 있는 것이다. jre를 가고 돌리니까 구조적으로 더 느릴 수 밖에 없다.




    파이썬도 JRE 위에 올라간다. 자바 컴파일러와 비슷한 그런 걸 하나 거칠 것이다. 그리고 파이썬이 느린 이유는 인터프리터 언어라서이다. Interpreter 언어 vs Compiler 언어 : c, cpp, java, pascal

    컴파일러 언어는 프로그램을 작성하면 -> 컴파일 과정을 거친다. -> Link해서 -> 최종적으로 exe 파일이나 dll 파일을 만든다. 프로세스 하나씩 할당해서 돌릴 수 있다. 컴파일하고 링크해서 exe, dll 파일로 만들어진다는 것은 기계어 수준으로 만들어주는 것이다. 


    그런데 인터프리터 언어는 컴파일, 링크 과정이 없다. 그러면 그때서야 프로그램을 해석하고 실행시키고 하는 것을 한다. 여기 컴파일러 언어들은 컴파일하고 링크하는 과정에서 코드 옵티마이즈를 시킨다. 최적화되게끔. 그래서 기계어로 최적화될 수 있게 만든다. 하지만 인터프리터는 바로 해석해서 바로 실행해서 속도가 안 난다. 




    Q: 파이썬 왜 사용?

    - 사용 쉽고

    - 라이브러리 많고 오픈이고

    - 문법 간결

    - 간결하게 짜다가도 클래스 선언해서 할 수 있다.


    데이터 사이언스나 빅데이터 특화한게 아닌가 싶은게, 컨테이너 데이터 타입이 많다. 다른 언어는 벡터 클래스도 있긴 한데, 파이썬은 그런게 잘 되어있다. 파이썬은 상위 레벨을 생각하고 만든 거지, 시스템 레벨을 생각하고 만든 건 아닌 거 같다. 




    Q: 프로그램 짤 때 운영체제를 공부하면 도움이 되나?

    그냥 상위의 프로그램 짤 때는 미들웨어 프레임웍에서 제공하는 잘 알고 쓰는게 좋고, 운영체제에 가까이 가는 프로그래밍을 해야 이런 걸 알면 도움이 될 것이다.



    프로그램 (ex. visual studio)을 만드는 프로그램이 또 따로 있다.

    비전공자를 많이 뽑는데, 비즈니스 프로세스, domain knowledge에 대한 이해가 있어서. 전공자도 프로그래밍 외에는 잘 알지 못한다. 

    댓글

Designed by Tistory.