How Does Software Communicate With Hardware