카테고리 없음

[유닉스프로그래밍 및 실습]1주차

ML.chang 2019. 9. 5. 10:54

전 세계에서 가장 많이 사용하는 os :  Linux

안드로이드 밑에 Linux

맥 컴퓨터 

운영체제는 유닉스

 

virtual machine 및 Linux 설치.

호스트 컴퓨터 메모리 일부를 가지고서 가상 메모리..

키보드는 호스트 컴퓨터의 키보드를 가상 머신의 키보드.. focusing을 받으면.. 

프로그래밍을 그렇게 해준다. 

 

간단한 프로그램을 조합해서 복잡한 프로그램을 만든다. 

굉장히 많은 일을 하게 만든다. 복잡한 일들을 명령어 조합해서 만든다. 실제로 윈도우즈에서 터미널 창이 없었다...

그런데 윈도우즈에서 터미널을 만들어달라고 요청해서 터미널 프로그램이 생겼다. 

 

실행중인 프로그램 목록이 나온다. 

즐겨찾기 목록에 고정시켜놓으라고..

마우스 오른쪽 버튼 누르고 즐겨찾기 목록에 고정.. 우분투 프로그램의 기본 사용법..

즐겨찾기에 추가 하면 항상 여기 나와서 언제든지 실행 가능..

터미널 창에서 입력 해야한다. 

 

FAT파일 시스템

ex(확장) FAT구조 USB에서 많이 사용

마이크로소프트에 특허가 걸려있다. 

NT파일 시스템

ex4 파일 시스템

 

fuse 파일시스템을 유저 모드에서 사용하기 위한.. 

파일 시스템 코드가 운영체제 안에.. 

사용자 프로그램으로 파일 시스템 코드를 만든다. 커널이 필욯면 사용자 프로그램에게 부탁해서 데이터에 가져오게.. 사용자 프로그램 성능이 중요하면 운영체제 안에 커널모드로 만들면 돈다.

 

1. fetch --> decode --> execution --> result store 순으로 동작

-intel cpu의 경우 훨씬 더 복잡한 과정으로 동작.

4단계 intel같은경우 12단계 적정한 단계로 쪼개야한다..

PC변경의 예 

 

dependecy 앞 명령의 결과를 뒷 명령에 쓴다 그러면 안된다. 

cpu도 dependency가 없는 경우에만 

앞 명령의 결과가 나오자마자 전달하는 회로를 만들어서 바로바로 이용할 수 있게 거의 동시에.. 약간의 시간차이로 실행할 수 있게 하는 회로.. 

팬티엄 시피유 여러개의 명령ㅇ을 동시에 가져온다.

 

멀티코어는 이런 코어가 여러개 있는거다. 

 

한 사이클에 하나의 명령이 끝난다. 훨씬 빠르게 이것과 비교하면 4배가 빨라진다. 1980년대 mips같은 piplining을 

복잡한 cpu.. 간단한 구조의 cpu cpu들을 piplineing 나중에 pantium같은 복잡한 cpu도 pipilining을 한다. 

지금은 pipliing하고 슈퍼 스칼라도 하고 하나의 칩 cpu칩 멀티코어를 만든다. 

 

pantium은 간단하면서 전기를 조금 쓴다. 영국의 회사 디자인 설계만 한다. 퀄컴 애플 삼성 설계도를 가져다가 수정한다. 수정해서 자기들이 제작해서 사용한다. 퀄컴의 스냅드래곤 같은 cpu에서 사용한다. 

암 시피유의 설계도를 가져다가 수행했다. 

 

투기적 실행

두개 다 pipeling

투기적 실행의 문제가 뭐지?? 보안상의 헛점... 투기적 실행을 하면 내 권한으로 실행 할 수 있는지 ... 둘다 파이프라이닝 할때.. 보안체크 안하는거야.. 그겄대문에 문제가 된다.. 

소홀히 했다가.. 

cpu설계를 바꿔야하는데 그게 어려운 거다. 

 

pipeling하게 되면 점프할때.. 없애기 위해서 풀어쓸 수가 있다. 좋긴 한데 

 

 

콘덴서??

cpu가 메모리 

 

3단계 캐시 메모리를 쓴다. 

l1에서 찾고 없으면 l2 l3 없으면 dram에서  찾고 l3--> l2--> l1--> 에 넣고 가져간다. .

 

응용프로그램이 운영체제와 대화한다. 

마우스 클릭하고 있지 운영체제가 하는가?? 이것은 user interface 프로그램이다. 이것이 운영체제와 대화하는 것 terminal text user interface .. 지금은 grahpic 기반

운영체제에게 부탁한다 프로그램을 실행 해 주세요.. 운영체제.. user interface 프로그램을 통해서 운영체제에게 부탁한 것.. 운영체제 역할 하드웨어 자원을 다 관리한다. 그래서 응용 프로그램에게 시스템 호출 서비스를 제공한다. 그리고 사용자와 유저 인터페이스 프로그램이 가운데 있다. 

 

제안된 모든 기능을 조합한 mutics 프로그램 운영체제 마들자 국방부에서도 작ㅁ 제공.. 엄격한 보안기능까지.. multics 만들긴 했다. 그때 만들어진 개념이 다 있다.. 너무 느리다. 만들긴 했지만 하드웨어가 안따라간다. 실패라고 하기에는 뭐 하지만 ... 여기에 참여했던 사람들이ㅣ 나와서 벨 연구소에 있던 사람들 데니스 리치 C언어 만든 사람..  벨 연구소 돌아와서..  유닉스.. 이 사람들이 거의 천재적이야.. 굉장히 천재적인 설계.. 아무도 이 사람들은 유닉스를 새로 프로그래밍 하기 위해서 언어 자체를 새로 만들었어... C언어를 자기들을 만들고 C언어로 유닉스를 작성한다. 

 

C언에도 만들고 유닉스도 만들고 

 

unix는 소스코드가 C로 되어있고 무료로 배포하니까.'' 

 

unix 

 

cray는 슈퍼컴퓨터

 

톰슨과 리치가 C언어로 다시 작성..

태생이 연관이 되어있기 때문에 유닉스 용으로 C언어 고안...

c컴파일러만 있으면 이식 가능.. 

소스 코드를 대학에 개방함..

전통 라이센스는 시스템 V계열로 버클리 대학으로 가면 변종이 새로 작동해서 라이센스를 없앴다..

유닉스 라이크 하게 유닉스를 새로 만들었다. 

 

벨 연구소 

시스템 5계열..

버클리 대학에서 BSD 계열.

메모리 관리 기능 향상.. 

네트워킹 기능 추가 

TCP/IP 네트워킹 , 소켓(socket)등

 

 

 

더 큰 메모리.. 디램보다 더 큰 메모리를 어떻게 쓰고 있다고 ..

이게 가상 메모리 기능이다. 이게 가능한가? 프로그램이 dram보다 더 큰 메모리..?

 

가상 메모리 기능 프로그램의 일부만 적재한다. 하드디스크의 swap영역.. 가상메모리 기능  프로그램은 실제 dram보다 더 큰 메모리를 쓰고 있다고 생각하면서... 

자세한 내용은 운영체제 시간에 dram에 프로그램을 여러개 놓고 실행하면.. 바꾸면 죽어요 ms dos 메모리 보호가 안되었다. 남의 메모리 acess.. 메모리 보호가 안 되었는디 해 볼수는 있다. 

p가 100 byte짜리 array가 있고 p가 null이 아닌동안 100 byte.. 

access 막 증가시켜주면 여기로 갔다. 뭘 넣어 어떻게 될까?? 죽는거죠.. 엉뚱한 걸 acess하면 죽는다. 다 막아준다. acess 못하게 엉뚱한 메모리 acess하면 죽이게.. 항상 버그가 있다. 프로그램은 사람이 만든거라. 특히 심각하다 바로 블루 스크린...

 

가상 메모리가 뭐냐.. 실제 dram인데 하드디스크의 swap영역에 가상 메모리가 있다. 일부분만 메모리에 적재해서 실행 하거야. dram의 가상 메모리 기능.. 

그래서 프로그램이 실행하다가 엉뚱한 메모리를 acess했다. dram에서 process.. 이걸 감지해서 얘만 죽는거다. physical memory는 임시로 쓰는것 virual memory adress.. 32bit cpu는 0~4기가까지 다쓴다고 생각한다. dram에 넣고  실제 적제 된 물리번지로 바꿔서 가상번지가 증가된다고해서 자기 메모리에 가상번지 남에것을 acess하지는 않는다. 똑같이 가상으로 뭔가를 만들겠다.

 

 

기계 자체를 다 가상화시킨다. 메모리.. 모니터 디바이스 까지 가상화 기법들 사용된다. 

1960년대 ibm부터 썼다.

왜 그랬냐면 ibm은 운영체제를 기계어 assemby어 단일 사용자용 운영체제 다중 사용자용으로 바꾸려고 하니까 너무 어렵다. ibm은 가상머심 프로그램을 동작했고 다 가상머신 단일 사용자 운영체제를 여러명의 사용자를 서비스하게 ㄱ상머신 개념을 그때그때 도입 cpu성능이 워낙 좋아지니까 

 

프로그램을 i고하는 주소를 print i주소  둘다 똑같은 주소.. 

같은 번지.. print하면 이런거에요 둘다 가상머신 메모리 공간에서 만들어지기 때문에 둘다 가은 번지를 쓰고있다. 메모리가 적재되서는 ... 가상주소...

 

프로그램은 가상주소로 동작한다. 실행될때.. 임시적으로.. 가상머신.. 

 

번지를 가지고서 동작한다. 관리상의 편의를 위해서 page단위로 쪼갰다. pantium 4kb페이지 단위로 demand paging 필요한 부분만 프로그램을 page단위로 넣고. 실행하겠다. 가상 주소를 pyshcial 주소로 바꿔서 실행 실시간에 즉각적으로 demand paging 가상 메모리를 제공하기 위해서 메모리보다 훨씬 큰 용량 dram에 적재되는데 번호가 다르다. cpu가 그때그때.. demand paging..

 

이 자세한 구조는 운영체제 시간에 puch카드

 

엄청난 기술 ..

충격에 약하다 충격주면 부딛힌다. 깨진다.

Hard disk를 이렇게 원판인데 데이터 공간을 일렬로 세운다. 데이터를 적고 읽으면 데이터를 적고 .. 몇번째 위치에 적으니까. 파일을 다시 찾을 수 .. 

file system을 만들었다... 구조를 만들고 이름을 적고.. 이름 가지고 데이터 찾을 수 있게.. 이런 기능.. 파일 시스템.. 프로그램 안에 이미 내장이 되어있다. 하나의 디스크를 여러개 파티션으로 쪼개.. 4개의 파티션.. 파일 스텝 하나씩.. 파티션 4개 쪼개고.. 여러개로 쪼갤 수 있다. 

 

파일 스

 

바로 적으면 write throug

write back 나중에 한번에 디스크에 적는다.(버퍼에 모아놓았다가) 전기 나가면 데이터 사라진다.

중간에 flush를 해 준다. 변경된 버퍼에 잇는 제이터를. 위험을 줄인다. 강제적으로 flush해 줄 수도 있다. 

요즘은 ssd를 많이 쓴다. 굉장히 빠르다. 

 

하드 디스크 io성능이느리다. ssd가 나오면 성능의 병목지점이 어디냐..? 운영체제 code가 복잡해서..  

높은 성능의 하드웨어를 제대로 커버하지 못한다.